我有一个服务器连接客户端以接收字符串,但是当连接丢失时,服务器保持相同的状态,并且不会返回到它再次尝试建立连接的状态。我使用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
}
有人可以告诉我为什么这不会抛出异常吗?
答案 0 :(得分:3)
您需要实际对客户端输入流进行read
调用,以便触发SO超时。只有当所述read
调用块超过超时设置时,才会触发异常。
此外,它无法在服务器套接字上设置SO超时,因为您永远不会在服务器端从它“读取”。