1

これらは基本的なトピックかもしれませんが、他の場所で簡潔に答えられているのを見つけることができませんでした.

TCPサーバーを構築するとき、適切な接続を維持するために(たとえば、このメッセージがこのクライアントから来ていることを知るために)、接続している各クライアントを独自のポートにファームオフする必要があると私は理解しています。

これをどのように設定しますか?リストと、人々が接続する専用の「エントリポイント」ソケットがあると思います。接続している Socket は空きポートを見つけ、ポート番号で応答し、そのポートでリッスンする新しい Socket をセットアップします。これは正しいと思いますか?

この場合、着信接続をリッスンしている間、エントリ Socket をブロックする必要があるように思えます。このブロッキング読み取りは別のスレッドで行われますか?

追加の副次的な質問: 基本的な Java ゲームで試してみたい単純なメッセージ パッシングが本当に必要なだけです。Netty のようなものは、アプリケーションのこの特定のクルミにとって大ハンマーのように見えます。Java 標準ライブラリを使用して軽量で優れたものを作成するのが最善でしょうか?

4

2 に答える 2

1

クライアントは引き続き同じTCP宛先ポートを使用します。複数の接続は、IPアドレスと送信元ポート(クライアントによってランダムに選択されたもの)に基づいてTCPスタックによって処理されます。ただし、これについて心配する必要はありません。個別のスレッドへの接続の受け渡しを処理する方法については、OracleJavaIOチュートリアルを参照してください。かなり優れています。

于 2012-06-07T17:27:36.577 に答える
1

メインソケットは「マザーソケット」と呼ばれ、新しい接続を待ってブロックします。新しい接続が発生するaccept()と、新しいクライアント専用の新しいソケットを作成するメソッドを使用します。

を使用して、これらのソケットを管理できますSelector。マザー ソケットと、作成したその他のソケットをリッスンするようにセレクターを構成します。このようにして、すべての着信通信をリッスンする 1 つのスレッドを持つことができます。新しい通信がマザー ソケット上にある場合は、接続を受け入れて新しいソケットを生成し、それをセレクタに追加します。新しい通信が他のソケットの 1 つにある場合は、メッセージを適切に処理します。

私は常に独自のネットワーク コードを作成します。これは有益な学習体験ですが、これらが何をしているのかを正確に知ることもできます。

于 2012-06-07T17:22:37.870 に答える