我正在编写一个多线程服务器,目前只接收一个字符串并将其发送回大写。
我的问题是服务器没有检测到与客户端的连接何时丢失,因此客户端处理程序线程保持运行。
我有一个处理客户端请求的while循环,如果连接关闭/ lsot,我就会离开这个循环。
这是ClientHandler的代码
try {
inFromServer = clientSocket.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
OutputStream outToServer = clientSocket.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
while(!clientSocket.isClosed()){
if(in.available() > 0) {
String str = in.readUTF(); //Should catch EOF
System.out.println("[+] From " + clientSocket.getInetAddress() + " received: " + str);
String response = str.toUpperCase();
out.writeUTF(response);
}
}
System.out.println("[+] Closing client");
} catch (IOException e) {
e.printStackTrace();
}
我试图像这样制作while循环:
while(!clientSocket.isClosed() && inFromServer.read() != -1)
但这不起作用......
任何建议将不胜感激。
答案 0 :(得分:1)
Socket.isClosed()
仅在您已关闭套接字时才返回true。您检测到连接已关闭的方式同行是通过阅读它。您不应该使用in.available()
。相反,只需从套接字读取,套接字关闭时就会出现异常。