0
我尝试使用读取超时解决服务器端的用户断开连接检测。 这是我的代码部分:Java套接字读取超时异常
try {
socket.setSoTimeout(3000);
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
usr = new User(in.readUTF());
usr.connectUser();
int i=0;
while(true){
try{
i = in.readInt();
}
catch(SocketTimeoutException e){
System.Out.Println("Timeout");
// user connected, no data received
}
catch(EOFException e){
System.Out.Println("Disconnected");
// user disconnected
}
}
}
catch(Exception e){
// other exceptions
}
的代码工作正常除“用户断开连接”的问题。 我想赶上超时异常,只是继续等待数据 但只有当客户端仍然连接。 为什么我从来没有得到比SocketTimeoutException异常的其他异常? 不应该我得到IOException,而in.readInt()不能使用套接字,因为客户端断开连接?
有没有其他简单的方法来检测用户断开连接? 我的意思是不必要的断开,就像用户突然无线关机等...
谢谢, Lioz。
呃...这就是我认为......我唯一的例外是超时。我把2 println检查出来。我敢肯定,客户端断开连接...我的客户端是安卓手机,我关闭它的无线连接,以确保。任何其他想法? – HFDO5
附加信息,如果我关闭客户端的套接字,我得到正确的例外...(我将println测试添加到代码中) – HFDO5
@ HFDO5对等端必须调用close()才能收到EOS这段代码。只是关掉东西或拉电缆不这样做。这是超时例外存在的原因之一。 – EJP