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"
socket.close()、out.close()、in.close()。try-with-resources 或 finally 塊未提前關閉流。
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();
} // 自動關閉,順序正確