0

server.accept()新しいソケットが形成されていない場合、つまり新しい接続が確立されていない場合、メソッドは何を返しますか? sever.accept()が新しい接続を待っている間に次のコード行に移動することはできますか?

4

2 に答える 2

0

サーバーが接続を待っている間に何かをしたい場合は、複数のスレッドを使用できます。シングルスレッド アプリケーションでは、関数を呼び出して、それが戻るのを待たずに作業を続行することはできません。サーバーが接続を受け入れるのを待っているか、他の計算を行っているかのいずれかです。

スレッドに代わる可能性のある方法は、サーバー ソケットでソケット オプションを設定することです。SO_TIMEOUTacceptこれにより、タイムアウト内に接続が受信されない場合に例外をスローする呼び出しが行われ、次の行に進むことができます。

例えば:

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 に答える