1. 程式人生 > >Java中利用socket實現簡單的服務端與客戶端的通訊(入門級)

Java中利用socket實現簡單的服務端與客戶端的通訊(入門級)

Java程式設計中,要想要使用網路通訊,就離不開Socket程式設計,在此對socket進行簡單的介紹。首先宣告,這是一個入門級的介紹,僅僅簡單的實現了客戶端向服務端傳送資料,服務端正常的接收資料,當接收到特定的資料時,服務端和客戶端都關閉,一個服務端對應一個客戶端,不涉及多執行緒等內容,一切都是最簡單最基礎的知識點。

下面給出的程式碼,可以直接拷貝到eclipse中執行, 無需任何更改。

關於socket和seversocket的原理以及建構函式等一些簡單的介紹,可以檢視其他的一些部落格,期中寫的比較清晰,我給大家推薦一個[Java]Socket和ServerSocket學習筆記 。期中關於socket的通訊原理和需要基本瞭解的一些建構函式,常用函式等,都進行了簡單的介紹。

開發環境為eclipse,新建兩個普通的Java工程,一個命名為server_1,作為服務端,另一個命名為client_1,作為客戶端,完成的功能就是在客戶端的控制檯輸入內容後,客戶端將內容傳送至服務端,在服務端的控制檯可以看到輸入的內容,當輸入的內容為shutdown時,服務端和客戶端都關閉通訊,通訊結束。

服務端程式碼:

package server_1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class server_1 {  
    public static void main(String[] args) throws IOException { //將異常全部丟擲 
        ServerSocket server = new ServerSocket(10000);    //用serversocket來啟動伺服器,並指定埠號
        System.out.println("伺服器啟動。。。");
    
            Socket socket = server.accept();  //獲取客戶端的socket資訊
            BufferedReader in = null;  
            in = new BufferedReader(new InputStreamReader(socket.getInputStream())); //啟動緩衝區 
            while (true) {  
                  String msg = in.readLine(); // 將客戶端傳送來的資訊儲存在msg中 
                  System.out.println(msg);   
                  if (msg.equals("shutdown")) {  //客戶端如果傳送的是shutdown,就關閉客戶端
                        break;  
                  }  
             }
             in.close(); //執行相應的關閉操作                 
    }  
}
考慮這是一個入門級的程式,所以暫時不考慮各種異常情況,咋mian函式的後面就講各種異常丟擲。

建立seversocket,並且指定伺服器的埠號為10000,此時伺服器端開始執行。(埠號儘量取大於1024的數字,小於1024的一般都是系統程式佔用)

然後利用socket實現和客戶端的連線。

in是一個輸入緩衝區,客戶端傳送來的資訊就暫時儲存在這個緩衝區中。

然後用while語句,迴圈的監聽客戶端傳送過來的資料,當是一般資訊時,就講客戶端發來的內同打印到控制檯,如果是“shutdown”,則關閉伺服器端,此次通訊終止。

客戶端程式:

package client_1;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class client_1 {  
    public static void main(String[] args) throws Exception {  
    	System.out.println("客戶端啟動");
        Socket socket = new Socket("localhost", 10000);  //啟動socket,並連線本地主機的相應埠號
        PrintWriter out = new PrintWriter(socket.getOutputStream());  
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//從控制檯獲取輸入的內容  
        //不斷的獲取輸入的內容,並不斷的傳送給伺服器,當輸入shutdown時,跳出迴圈,停止執行
        while (true) {  
            String msg = reader.readLine();  
            out.println(msg);  
            out.flush();  
            if (msg.equals("shutdown")) {  
                break;  
            }  
        }  
        //執行相應的關閉操作
        socket.close();
        out.close();
        reader.close();
    }  
}  

同樣也是在main函式後就丟擲所有的異常,不考慮一些比較複雜的異常情況。

建立socket來準備進行通訊,指定服務端的位置為“localhost”(也就是本機,也可以使用IP:127.0.0.1),埠號要和伺服器端的埠號對應,為10000。
建立reader為緩衝區,將控制檯輸入的內容先儲存到緩衝區中。

建立out用來發送資料。

通過while迴圈監聽控制檯,通過socket將緩衝區的內容傳送到服務端,如果輸入的是一般結果,則將內容傳送給服務端,如果輸入的時“shutdown”,則將內容傳送後跳出迴圈, 此次通訊結束。

以上就是關於socket通訊的一個非常簡答的例子。


2015年11月19日   西安交通大學