1

ソケットの処理方法を理解するのに問題があります。新しい接続があるかどうかを確認する必要があるため、サーバーソケットは独自のスレッドで実行する必要があることがわかりました。さて、新しい接続によって開かれたすべてのソケットがスレッドで実行されるべきかどうかはわかりません。

私が念頭に置いているのは、ソケットが状態になるたびにチェックすることです。読むべきものがあれば、読んでください。そうでない場合は、次のソケットを確認してください。このプロセスがスレッドで行われる例をいくつか見ますが、ソケットに何かをさせたくないので、データがあるかどうかを読み取って処理したいだけです。

4

3 に答える 3

2

答えはノーです。別のスレッドで聞く必要はありません。ただし、「聞いている」間、プログラム全体がそれが完了するのを待ってから先に進むことに注意してください。

したがって、プログラム全体を待機させても問題ない場合を除き、別のスレッドをお勧めします。

于 2013-05-01T22:55:09.727 に答える
1

available() を使用したラウンドロビンには多くの問題があります。

  1. available() が実際に機能することを前提としていますが、これは保証されていません。
  2. すべてのクライアントが同じ量のサービスを必要としていると想定しています。
  3. 1 つのクライアントが処理されている間、N-1 のクライアントが待機します。
  4. 応答しないクライアントは、アプリケーションだけでなく他のすべてのクライアントをブロックする可能性があります。

もっとあると思います。

これをしないでください。スレッドまたは NIO を使用します。

于 2013-05-01T23:27:32.540 に答える