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

readSO タイムアウトをトリガーするには、クライアントの入力ストリームで実際に呼び出しを行う必要があります。readまた、タイムアウト設定よりも長く呼び出しがブロックされた場合にのみ、例外がトリガーされます。

また、サーバー側でソケットから「読み取る」ことはないため、サーバーソケットに SO タイムアウトを設定しても意味がありません。

于 2013-04-15T11:45:09.400 に答える