首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java SocketException: socket write error / Socket closed:寫入前關閉 Socket 導致

     編輯:程式設計綜合問答

異常堆棧關鍵行


at client.ClientDemo.main(ClientDemo.java:92)   // 寫入操作
at client.ClientDemo.main(ClientDemo.java:334)  // 關閉操作

根因

代碼在 執行寫入操作(第 92 行)之前或同時,已經關閉了 Socket(第 334 行)。常見模式:


Socket socket = new Socket(host, port);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
// ... 某處提前調用了 socket.close() 或 out.close()
out.writeObject(obj); // 第 92 行:Socket 已關閉,拋出 "Socket closed"

排查步驟

  1. 檢查第 334 行附近是否有 socket.close()、out.close()、in.close()。
  2. 確認 try-with-resources 或 finally 塊未提前關閉流。
  3. 檢查多線程是否共享同一 Socket 並並發關閉。

修正模式


try (Socket socket = new Socket(host, port);
     ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
     ObjectInputStream in = new ObjectInputStream(socket.getInputStream())) {
    // 所有通信邏輯在這裡
    out.writeObject(request);
    out.flush();
    Object response = in.readObject();
} // 自動關閉,順序正確
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved