server.accept()
新しいソケットが形成されていない場合、つまり新しい接続が確立されていない場合、メソッドは何を返しますか? sever.accept()
が新しい接続を待っている間に次のコード行に移動することはできますか?
質問する
292 次
2 に答える
0
サーバーが接続を待っている間に何かをしたい場合は、複数のスレッドを使用できます。シングルスレッド アプリケーションでは、関数を呼び出して、それが戻るのを待たずに作業を続行することはできません。サーバーが接続を受け入れるのを待っているか、他の計算を行っているかのいずれかです。
スレッドに代わる可能性のある方法は、サーバー ソケットでソケット オプションを設定することです。SO_TIMEOUT
accept
これにより、タイムアウト内に接続が受信されない場合に例外をスローする呼び出しが行われ、次の行に進むことができます。
例えば:
ServerSocket ss = new ServerSocket(8989);
ss.setSoTimeout(10000); // 10 seconds
Socket clientSocket;
try {
clientSocket = ss.accept();
// process connection from client
} catch (SocketTimeoutException ste) {
// connection was not received,
// do something else
}
もう 1 つの方法は、ノンブロッキング IO とSelector
クラスを使用することです。この方法で書かれたノンブロッキング ソケット サーバーの例を次に示します。
于 2013-09-25T16:50:52.197 に答える
0
いいえ、server.accept() はブロッキング メソッドであり、待機します。
javadocから
このソケットへの接続をリッスンし、それを受け入れます。メソッドは、接続が確立されるまでブロックします。
于 2013-09-25T16:51:38.700 に答える