1. 程式人生 > >Java中使用socket實現客戶端與服務端互動

Java中使用socket實現客戶端與服務端互動

Socket解釋:

網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket。

Socket的英文原義是“孔”或“插座”。作為BSD UNIX的程序通訊機制,取後一種意思。通常也稱作"套接字",用於描述IP地址和埠,是一個通訊鏈的控制代碼,可以用來實現不同虛擬機器或不同計算機之間的通訊。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都開啟一個Socket,並繫結到一個埠上,不同的埠對應於不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如佈滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟體將插頭插到不同編號的插座,就可以得到不同的服務。
socket互動原理圖解 連線過程: 根據連線啟動的方式以及本地套接字要連線的目標,套接字之間的連線過程可以分為三個步驟:伺服器監聽,客戶端請求,連線確認。 (1)伺服器監聽:是伺服器端套接字並不定位具體的客戶端套接字,而是處於等待連線的狀態,實時監控網路狀態。 (2)客戶端請求:是指由客戶端的套接字提出連線請求,要連線的目標是伺服器端的套接字。為此,客戶端的套接字必須首先描述它要連線的伺服器的套接字,指出伺服器端套接字的地址和埠號,然後就向伺服器端套接字提出連線請求。 (3)連線確認:是指當伺服器端套接字監聽到或者說接收到客戶端套接字的連線請求,它就響應客戶端套接字的請求,建立一個新的執行緒,把
伺服器
端套接字的描述發給客戶端,一旦客戶端確認了此描述,連線就建立好了。而伺服器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連線請求。 socket連線過程圖解 下面是我用socket實現簡單的伺服器客戶端互動demo: Server端: 複製程式碼
 1       try {
 2             //建立繫結到特定埠的伺服器套接字
 3             ServerSocket serverSocket=new ServerSocket(9999);
 4             System.out.println("***伺服器即將啟動,等待客戶端連結***");
5 //偵聽並接受到此套接字的連線 6 Socket socket=serverSocket.accept(); 7 //獲取輸入流 8 InputStream is=socket.getInputStream(); 9 //將位元組輸入流轉為字元輸入流 10 InputStreamReader isr=new InputStreamReader(is); 11 BufferedReader br=new BufferedReader(isr); 12 String str=null; 13 while((str=br.readLine())!=null){ 14 System.out.println("伺服器說:客戶端傳送了:"+str); 15 br.readLine(); 16 } 17 //此套接字的輸入流置於"流的末尾" 18 socket.shutdownInput(); 19 br.close(); 20 isr.close(); 21 is.close(); 22 } catch (IOException e) { 23 e.printStackTrace(); 24 }
複製程式碼

Client端:

複製程式碼
 1      try {
 2             Socket socket=new Socket("127.0.0.1",9999);
 3             OutputStream os=socket.getOutputStream();
 4             PrintWriter print=new PrintWriter(os);
 5             print.write("你好啊!伺服器!");
 6             print.close();
 7             os.close();
 8         } catch (Exception e) {
 9             e.printStackTrace();
10         }
複製程式碼

首先需要啟動伺服器端,建立ServerSocket等待客戶端連線:

然後,啟動客戶端:

這樣,一個簡單的Socket通訊就實現了!