1. 程式人生 > >Java Socket通信

Java Socket通信

spa 報文 edr request 關閉 讀取 大量 服務端 net

1、TCP協議是面向連接的、可靠的、有序的、以字節流的方式發送數據,通過三次握手方式建立連接,形成傳輸數據的通道,在連接中進行大量數據的傳輸,效率會稍低

2、Java中基於TCP協議實現網絡通信的類 客戶端的Socket類 服務器端的ServerSocket類 技術分享圖片 3、Socket通信的步驟 ① 創建ServerSocket和Socket ② 打開連接到Socket的輸入/輸出流 ③ 按照協議對Socket進行讀/寫操作
④ 關閉輸入輸出流、關閉Socket 4、服務器端: ① 創建ServerSocket對象,綁定監聽端口 ② 通過accept()方法監聽客戶端請求 ③ 連接建立後,通過輸入流讀取客戶端發送的請求信息 ④ 通過輸出流向客戶端發送鄉音信息 ⑤ 關閉相關資源
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 服務端 * * @author sun * */ public class Server { public static void main(String[] args) throws IOException { ServerSocket serverSocket = new ServerSocket(10086);//
1、創建一個服務器端Socket,即ServerSocket,指定綁定的端口,並監聽此端口 Socket socket = null; BufferedReader br = null; PrintWriter pw = null; while (true) { System.out.println("服務端啟動"); socket = serverSocket.accept();// 2、 監聽客戶端連接,程序一直阻塞在這個語句上進行等待 // 3、獲取輸入流,並讀取客戶端信息 br = new BufferedReader(new InputStreamReader(socket.getInputStream())); String reqstr = br.readLine(); System.out.println("服務端收到請求報文:" + reqstr); // 4、獲取輸出流,響應客戶端的請求 pw = new PrintWriter(socket.getOutputStream());// 建立一個Socket pw.write("發送報文成功,響應客戶端!"); pw.flush(); // 5、關閉資源;采用倒關原則 pw.close(); br.close(); } } }
5、客戶端: ① 創建Socket對象,指明需要連接的服務器的地址和端口號 ② 連接建立後,通過輸出流想服務器端發送請求信息 ③ 通過輸入流獲取服務器響應的信息 ④ 關閉響應資源
/**
 * 客戶端
 * 
 * @author sun
 *
 */
public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("我是客戶端");
        Socket socket = new Socket("localhost", 10086);// 1、創建客戶端Socket,指定服務器地址和端口
        PrintWriter pw = new PrintWriter(socket.getOutputStream());
        pw.println("client request");
        pw.flush();
        InputStream is = socket.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        String info = null;
        while ((info = br.readLine()) != null) {
            System.out.println("我是客戶端,服務端響應:" + info);
        }
        // 4、關閉資源
        br.close();
        is.close();
        pw.close();
    }
}

在寫這個Demo時,遇到過異常,這個異常是java.net.SocketException: Socket is closed,

該異常在客戶端和服務器均可能發生。異常的原因是己方主動關閉了連接後(調用了Socket的close方法)再對網絡連接進行讀寫操作。

參考連接:https://www.cnblogs.com/rocomp/p/4790340.html

Java Socket通信