【发布时间】:2012-10-24 04:56:09
【问题描述】:
我尝试使用读取超时来克服服务器端的用户断开连接检测。 这是我的代码的一部分:
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 我从来没有遇到过其他异常? 我不应该在 in.readInt() 因为客户端断开连接而无法使用套接字时得到 IOException 吗?
还有其他简单的方法来检测用户断开连接吗? 我的意思是不必要的断开连接,例如用户突然关闭 wifi 等...
谢谢, 利奥兹。
【问题讨论】:
标签: java sockets client-server inputstream