我有一个与客户端连接以接收字符串的服务器,但是当连接丢失时,服务器将保持相同的状态,并且不会回到尝试再次建立连接的状态。我使用了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超时没有用,因为您永远不会在服务器端从中“读取”它。

10-02 02:04