0

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

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

4

1 回答 1

3

您需要实际read调用客户端输入流才能触发 SO 超时。read并且仅当所述调用阻塞的时间超过超时设置时才会触发异常。

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

于 2013-04-15T11:45:09.400 回答