【发布时间】:2016-01-06 09:50:39
【问题描述】:
我有一个客户端程序,它将在控制台中键入的消息发送到服务器。根据一些建议,我使用Socket.checkError() 介绍了对关闭套接字的检查。然而,由于某种原因,它仅在第二次尝试发送消息失败后才指示错误。
我的代码:
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
while (true)
try (
Socket clientSocket = new Socket(hostname, port);
PrintWriter socketOut = new PrintWriter(clientSocket.getOutputStream(), true);
) {
String input;
while ((input=stdIn.readLine())!=null) {
socketOut.println(input);
if (socketOut.checkError()) {
System.out.println("Got socket error");
break;
}
}
} catch (IOException e) {
try {
Thread.sleep(5000);
} catch (InterruptedException e1) {}
}
收到“message1”后,我(手动)关闭了我的服务器端。因此,我希望在尝试发送下一条消息时收到错误。然而,它只出现在一条消息之后:
message1
message2
message3
Got socket error
谁能解释这种行为并告诉我一种在第一次尝试发送无效消息时立即获得通知的方法?
【问题讨论】: