Socket實現client和server端通信(Java)(轉)


轉自: https://blog.csdn.net/yayun0516/article/details/50819147

https://www.jianshu.com/p/2d4f223f1462

socket字面意思為插座,打個比喻,當兩台電腦需要通訊時,每一台電腦准備好一個網線插口,插上網線,連接成功。同理,當兩台計算機應用程序需要連接時,也需要像電腦一樣准備好一個網線插口,這個東西在操作系統中叫做socket(套接字),它包含三個概念:(protocol + ip + port)。

概念形象化

socket:火車站
protocol:高鐵 動車 特快 普快 綠皮 貨運 蒸汽機車
ip:目的地站名
port:站內出站口

這里我們主要實現一下socket通信,socket通信在java中應用十分廣泛。比如QQ和MSN等都是基於socket通信的,什么是socket?簡單理解socket就是ip+端口。通過實例來觀察一下最簡單的socket通信是怎么實現的吧。

首先實現server端代碼:

package com.socket.demo;
 
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
    public static void main(String[] args) {
        try{
            ServerSocket serverSocket=new ServerSocket(8888);
            System.out.println("----------------服務端執行,開始監聽請求----------------");
            Socket socket=serverSocket.accept();//開始監聽
            InputStream inputStream=socket.getInputStream();
            BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
            //獲取請求內容
            String info;
            while ((info=bufferedReader.readLine())!=null) {
                System.out.println("我是server端,client請求為:"+info);
                
            }
            //關閉資源
            socket.shutdownInput();
            bufferedReader.close();
            inputStream.close();
            socket.close();
            serverSocket.close();
            }catch(Exception exception){
                
            }
 
    }
    
}

然后實現client代碼:

 

package com.socket.demo;
 
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class Client {
    public static void main(String[] args) {
        try {
            //發送到8888端口
            Socket socket=new Socket("127.0.0.1", 8888);
            //輸出流
            OutputStream outputStream=socket.getOutputStream();
            PrintWriter printWriter=new PrintWriter(outputStream);
            printWriter.write("server端你好,我是client。");
            printWriter.flush();
            //關閉資源
            printWriter.close();
            outputStream.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    
 
}

結構如圖:

然后我們首先運行服務器端:(順序不能顛倒哦)

然后啟動客戶端:

這里可以看到,客戶端將信息發送到服務器端,服務器端接收到信息后將信息在控制台進行輸出。好了,最簡單的一個socket通信就實現了。

總結一下如下圖:

 

 

一些函數:

TTransport transport = new TSocket(ip,port) 傳的就是ip地址和端口號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM