この回答はすべてUDPソケットの使用に関するものです。あなたがTCPソケットを使うように気を変えたら、それはほとんどすべて無関係になります。
- クライアントとサーバーをコーディングする必要がありますか? (あなたのデータは本当に重要ではなく、より信頼性の高い通信よりも低レイテンシーのメリットがあれば、公正な選択)、あなたはここで選択肢の多くを持っていないあなたはUDPを使用するようにすることを選択したので
: 「サーバー」はネットワークからパケットを受信するためのコードで、「クライアント」はパケットをネットワークに送信するためのコードです。 UDPは、2ウェイソケットを確立するTCPと異なり、サーバーがクライアントと通信するためのメカニズムを提供しません。この場合、2つのホスト間で双方向の通信を行うには、それぞれサーバーとクライアントのコードが必要です。
UDPブロードキャストの使用を選択します。両方のクライアントがブロードキャストアドレス(通常はホームネットワークの場合は192.168.1.255ですが、何でも構いません)でUDPブロードキャストを受信して送信します。これはコード化するのがやや複雑ですが、クライアント/サーバーの設定が不要になり、ユーザーのためのプラグインのプレイが増えると見られます。ただし、これはインターネット上では機能しません。
また、ブロードキャストをブロードキャストおよびリスンすることでホストが検出されるハイブリッド方式を作成できますが、ホストが選択されると、ホストを使用してユニキャストソケットをホストします。手動でネットワーク設定(各自のリモートホスト/ポート)を指定して、インターネット上で動作するようにフォールバックを提供することができます。
最後に、すべてのクライアントが接続する真の "サーバー"役割を提供することができます。サーバは、それに接続されているクライアントを認識し、次にそれに接続しようとします。これはソケットレベルではなく、より高いレベルのサーバーです。両方のホストは、依然としてパケット送信(クライアント)と受信(サーバー)コードを持つ必要があります。
UDPを使用しているため、実際には選択肢がありません。 UDPは、前後に通信できる永続的な接続を確立しません。詳細については、上記の点を参照してください。
上記の質問に照らして、あなたの質問は「各ホストが同じポートでリッスンする必要がありますか?私はあなたのコーディングを確実に楽にしてくれるはずですが、そうする必要はありません。あなたがしていない場合、最初のポイントの3番目のオプションを選択すると、 "クライアントの"最初のメッセージのサーバーに "このポートで私に接続する"データフィールドが必要になります。