我有一个与客户端连接以接收字符串的服务器,但是当连接丢失时,服务器将保持相同的状态,并且不会回到尝试再次建立连接的状态。我使用了setSoTimeout
,但是它不起作用。
这是我的代码:
ServerSocket welcomeSocket = null;
Socket connectionSocket = null;
BufferedOutputStream outToClient = null;
try {
System.out.println("connecting to send "+fileToSend);
welcomeSocket = new ServerSocket(3249);
connectionSocket = welcomeSocket.accept();
connectionSocket.setSoTimeout(10000);
welcomeSocket.setSoTimeout(10000);
outToClient = new BufferedOutputStream(connectionSocket.getOutputStream());
} catch (Exception ex) {
System.out.println("set so");
break;
// Do exception handling
}
有人可以告诉我为什么这没有引发异常吗?
最佳答案
您实际上需要在客户端输入流上进行read
调用,以触发SO超时。并且仅当所说的read
调用阻塞时间超过超时设置时,才会触发异常。
而且,它对在服务器套接字上设置SO超时没有用,因为您永远不会在服务器端从中“读取”它。