2017-10-23 4 views
0

私の問題は、ServerSocket.accept()コマンドは、クライアントが接続されるまで待機し続けることです。しかし、私がしたいことは、クライアントを数秒間聴かなければならないということです。クライアントが接続すると、クライアントにデータを送信しなければ、ServerSocketを終了する必要があります。javaでServerSocket.accept()コマンドを閉じるには?

クライアントがしばらく接続していないときに、ServerSocket.accept()コマンドをバイパスするにはどうすればよいですか?

答えて

1

ServerSocket.close()(もちろん別のスレッドから)。 accept()でスレッドがブロックされている場合はSocketExceptionがスローされますが、接続が確立されていれば、既存のSocketは正常です。

単純でナイーブ例

ServerSocket ss = new ServerSocket(8123); 

    new Thread() { 
     @Override 
     public void run() { 
      try { 
       Thread.sleep(5000); 
       ss.close(); 
      } catch(InterruptedException e) { 
      } catch(IOException e) { 
      } 
     } 
    }.start(); 
    Socket s = ss.accept(); 
関連する問題