【发布时间】:2018-07-12 16:33:33
【问题描述】:
无法检测到套接字关闭。使用 inputStream 读取时未收到 -1。我正在考虑在发生 SocketTimeoutException 的情况下断开连接并尝试再次连接套接字。这有多可行?
socket.setSoTimeout(100);
InputStream dis = socket.getInputStream();
int count =0;
try {
LogManager.logInfo("Inside read thread before reading");
count = dis.read(buffer); // not receiving -1 in case of socket close
} catch (SocketTimeoutException e) {
LogManager.logError("Socket timedout",e);
// should i try to reconnect to socket here
}
【问题讨论】:
-
你的代码比显而易见的问题提出了更多的问题。在您的情况下,似乎流被卡住了,因此至少一侧应该
flush()频道或刷新它。在你的情况下,想象一个简单的场景,你在读取流时得到SocketTimeoutException,导致另一端真的关闭(在调用socket.connect()之后。你需要处理大量可能的错误。也采取看看java NIO
标签: java sockets network-programming inputstream socket-timeout-exception