setSoTimeout在java tcp连接中不起作用

时间:2013-04-15 11:37:14

标签: java

我有一个服务器连接客户端以接收字符串,但是当连接丢失时,服务器保持相同的状态,并且不会返回到它再次尝试建立连接的状态。我使用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
                } 

有人可以告诉我为什么这不会抛出异常吗?

1 个答案:

答案 0 :(得分:3)

您需要实际对客户端输入流进行read调用,以便触发SO超时。只有当所述read调用块超过超时设置时,才会触发异常。

此外,它无法在服务器套接字上设置SO超时,因为您永远不会在服务器端从它“读取”。