gpt4 book ai didi

java - Java服务器套接字未检测到丢失的连接

转载 作者:行者123 更新时间:2023-12-03 11:55:34 27 4
gpt4 key购买 nike

我在wifi网络上都有一个套接字客户端(在android手机上)和服务器(在PC上),服务器成功地从客户端读取了数据。
但是,当我关闭手机上的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());
}

最佳答案

设置一个超时时间,假设10分钟内未发送任何数据,请在60秒内将其关闭!

Setting a timeout for socket operations

该问题的答案可能会对您有所帮助。

关于java - Java服务器套接字未检测到丢失的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30351859/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com