我在wifi网络上有一个套接字客户端(在android手机上)和服务器(在PC上),并且服务器成功地从客户端读取数据。Java serversocket未检测到丢失连接
但是,当我关闭手机上的wifi时,服务器读取只是挂起,而我希望会引发一些错误。
我确实在服务器上设置了setSoTimeout,但读取不超时。
在PC上的netstat仍然显示已建立的连接
的netstat -na | grep的6668
TCP 192.168.43.202:6668 192.168.43.26:43076 ESTABLISHED
有没有办法告诉如果客户端主机已经消失,或者让读超时?
这里是服务器读取
if (ss.isConnected()) {
try {
readData();
} catch (java.net.SocketTimeoutException ex) {
logger.warning(ex.toString());
} catch (InterruptedIOException ex) {
logger.warning(ex.toString());
} catch (IOException ex) {
logger.log(Level.WARNING, "Data communication lost will close streams - IOEx - socket status {0}", ss.socketStatus());
closeStreams();
} catch (Exception ex) {
logger.log(Level.WARNING, "Data communication lost will close streams - Ex - socket status {0}", ss.socketStatus());
closeStreams();
}
}
其中READDATA是,
public void readData() throws IOException {
for (int i = 0; i < data.length; i++) {
data[i] = ss.readDouble();
}
}
ss.readDouble()是,
public double readDouble() throws IOException {
return in.readDouble();
}
与服务器连接,
public void connect() throws IOException {
if (serverSocket == null || serverSocket.isClosed()) {
init();
}
logger.log(Level.INFO, "Wait on " + serverSocket.getLocalPort());
server = serverSocket.accept();
serverSocket.close();
logger.log(Level.INFO, "Connected to {0}", server.getRemoteSocketAddress());
out = new DataOutputStream(server.getOutputStream());
in = new DataInputStream(server.getInputStream());
}
为什么每次接受连接时都要关闭服务器套接字?不要这样做。 – EJP