首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Socket 類網絡通訊詳解:連接、收發、關閉

     編輯:Java 相關知識

三步驟核心流程

  1. 連接服務器
  2. 發送/接收數據
  3. 關閉連接

1. 連接服務器

// IP 連接
Socket socket = new Socket("192.168.1.100", 8080);
// 域名連接(內部自動 DNS 解析)
Socket socket = new Socket("www.example.com", 80);

構造方法會阻塞直到連接成功或超時拋出異常。

2. 數據收發

// 獲取流
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();

// 發送(建議加 BufferedWriter 提升效率)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out));
bw.write("GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n");
bw.flush(); // 必須 flush,否則數據停留在緩衝區

// 接收
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line);
}

3. 關閉連接的四種方式

方式代碼特點
Socket.close()socket.close()標準、立即釋放資源
關閉流socket.getInputStream().close()流關閉觸發 Socket 關閉
程序退出JVM 退出非優雅,可能殘留連接
GC 回收socket = null不可控,不推薦

狀態檢查方法

socket.isConnected()  // 是否曾經連接成功
socket.isClosed()     // 當前是否關閉
// 真正處於連接狀態:!isClosed() && isConnected()

半關閉控制

socket.shutdownOutput(); // 僅關閉發送,仍可接收
socket.shutdownInput();  // 僅關閉接收
socket.isOutputShutdown();
socket.isInputShutdown();

端口掃描示例

for (int port = 1; port <= 65535; port++) {
    try (Socket s = new Socket("localhost", port)) {
        System.out.println("Port " + port + " open");
    } catch (IOException ignored) {}
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved