Socket實現TCP編程

Socket簡介

Socket通信

TCP協議是面向連接的、可靠的、有序的、面向字節流的方式發送數據
基於TCP協議實現網絡通信的類

  • 客戶端的Socket類
  • 服務器端的ServerSocket類

Socket通信模型

這裏寫圖片描述

Socket通信實現步驟

  1. 創建ServerSocket和Socket
  2. 打開連接到Socket的輸入/輸出流
  3. 按照協議對Socket進行讀/寫操作
  4. 關閉輸入輸出流、關閉Socket

服務器端

  1. 創建ServerSocket對象,綁定監聽端口
  2. 通過accept()方法監聽客戶端請求
  3. 連接建立後,通過輸入流讀取客戶端發送的請求信息
  4. 通過輸出流向客戶端發送響應信息
  5. 關閉相關資源
public class Server{
    public static void main(String[] args){
        try{
            //1.創建一個ServerSocket,指定綁定的端口,並監聽此端口
            ServerSocket ss = new ServerSocket(8888);
            //2.調用accept()開始監聽,等待客戶端連接
            Socket socket = ss.accept();
            //3.獲取輸入流,讀取客戶端信息
            InputStream is = socket.getInputStream();
            //4.提升性能,放入字符流中
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info = null;
            while((info=br.readLine()) != null){
                System.out.println("我是服務器,客戶端說:"+info);
            }
            //5.關閉相關資源 
            socket.shutdownInput();
            br.close();
            isr.close();
            is.close();
            socket.close();
            ss.close();
        }
    }
}

客戶端

  1. 創建Socket對象,指明需要連接的服務器地址和端口號
  2. 建立連接後,用輸出流向服務器發送請求信息
  3. 通過輸入流讀入服務器的響應信息
  4. 關閉相關資源
public class Client{
    public static void main(String[] args){
        //1.創建Socket,指定地址和端口
        Socket socket = new Socket("127.0.0.1",8888);
        //2.獲取輸出流,向服務器發送信息
        OutputStream os = socket.getOutputStream();
        //將輸出流包裝爲字符流
        PrintWriter pw = new PrintWriter(os);
        pw.write("用戶名:123;密碼:abc");
        pw.flush();

        //關閉輸出流
        socket.shutdownOutput();
        pw.close();
        os.close();
        socket.close();
    }catch(UnknowHostException e){
        e.printStackTrace();
    }catch(IOException e){
        e.printStackTrace();
    }
}

先啓動服務器,再啓動客戶端

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章