1. 程式人生 > >Java中Socket的用法(一) 普通Socket的簡單用法

Java中Socket的用法(一) 普通Socket的簡單用法

Java中網路通訊是通過Socket實現的,Socket分為ServerSocket和Socket兩大類,ServerSocket用於服務端,可以通過accept方法監聽請求,監聽到請求後返回Socket,Socket用於具體完成資料傳輸,客戶端直接使用Socket發起請求並傳輸資料

ServerSocket的使用可以分為三步:

  1. 建立ServerSocket。ServerSocket的構造方法一共有5個,用起來最方便的是ServerSocket(int port),只需要一個port(埠號)就可以了。
  2. 呼叫創建出來的ServerSocket的accept方法進行監聽。accept方法是阻塞方法,是說呼叫accept方法後程序會停下來等待連線請求,在接收到請求後accept方法會放hi一個Socket。
  3. 使用accept方法返回的Socket與客戶端進行通訊。

下面寫一個服務端ServerSocket簡單的使用示例:

/**
 * @Description: 普通Socket的用法:伺服器端
 * @Author: gradual
 * @Date: 2018-10-24 上午11:02
 */
public class Server {
    public static void main(String[] args) {
        try {
            //建立一個ServerSocket監聽8080埠
            ServerSocket server = new ServerSocket(8080);
            //等待請求
            Socket socket = server.accept();
            //接收到請求後使用socket進行通訊,建立BufferedReader用於讀取資料
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String line = is.readLine();
            System.out.println("接收到客戶端訊息 :" + line);
            //建立PrintWriter,用於傳送資料
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            pw.println("返回訊息 : " + line);
            pw.flush();
            //關閉資源
            pw.close();
            is.close();
            socket.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在上面的Server裡面,首先建立了ServerSocket,然後呼叫accept等待請求,當接收到請求後,用返回的Socket建立Reader和Writer來接收和傳送資料,Reader接收到資料後儲存到line,然後列印到控制檯,再將資料傳送到client,告訴client接收到的是什麼資料,功能非常簡單。

然後再來看看客戶端Socket的用法。Socket的使用也一樣,首先建立一個Socket,Socket的構造方法非常多,這裡用的是Socket(String host, int port),把目標主機的地址和埠號傳入即可,Socket建立的過程就會跟服務端建立連線。建立完Socket後,再用其建立Writer和Reader來傳輸資料,資料傳輸完後釋放資源關閉連線就可以了。

下面看一個客戶端簡單的示例:

/**
 * @Description: 普通Socket的用法:客戶端
 * @Author: gradual
 * @Date: 2018-10-24 上午11:07
 */
public class Client {
    public static void main(String[] args) {
        String msg = "Client Data";
        try {
            //建立一個Socket,跟本機的8080埠連結
            Socket socket = new Socket("127.0.0.1", 8080);
            //使用Socket建立PrintWriter和BufferedReader進行讀寫
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //傳送資料
            pw.println(msg);
            pw.flush();
            //接收資料
            String line = is.readLine();
            System.out.println("接收到伺服器返回的資料 : " + line);
            //關閉資源
            pw.close();
            is.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服務類終端列印訊息:

客戶機終端列印訊息:

這個小案例功能也非常簡單,啟動後自動將msg傳送給服務端,然後再接收服務端返回的資料並列印到控制檯,最後釋放資源關閉連線。