UDP を使用したサーバーとクライアント間の通信について質問があります。最初に、私がやろうとしていることを説明します。
- クライアントは、ランダムな UDP ソース ポートを使用してサーバーにメッセージを送信し、静的サーバー UDP ポート (11000) に送信します。
- 次に、サーバーはクライアントの送信ポートを学習します。
- 次に、サーバーは別のランダム ポートを使用して、クライアントの送信ポートにメッセージを送り返します。
問題は、クライアントのランダム ポートがルーターで転送されている場合にのみ、サーバーが返送できることです。可能かどうかはわかりませんが、クライアントがポートを転送せずに送信したのと同じポートを使用して、サーバーがクライアントに返信できるようにすべきではありませんか? 穴あけについても読みましたが、正しく理解していれば、ピアツーピア接続が必要な場合にのみ必要です。サーバーには静的IPがありました。私はC#でこれを試しています。
質問が明確であることを願っています。前もって感謝します!
編集: セットアップに関する情報:
クライアントは、ほぼすべての場所からサーバーに接続できるゲーム クライアントです。(現在、自宅のPCで実行しています)。サーバーは学校にあり、静的 IP を持っています。サーバーのすべてのポートが開いており、サーバーは ftp にも使用され、TCP を使用するサーバーが実行されています。それらはうまくいきます。TCP が接続を作成し、サーバーがその接続を使用してクライアントに送り返すため、TCP が機能します。UDP の問題は、UDP がコネクションレスであるため、サーバーがクライアントに送り返すことができないことです。
私が言ったように、クライアントでポートを開くと、すべてがうまく機能します。しかし、私の質問は次のとおりです。クライアントのポートを開かずにクライアントに送り返すにはどうすればよいですか? ほとんどのゲームでは、ポートを開く必要はありません。ポートフォワーディングなしで返送する可能性はありますか、それともC#を使用してポートを開くことができますか?
EDIT2:答えが見つかりました
私は答えを見つけました。通信するには、送信と受信の両方に同じ UdpClient を使用する必要があります。送信用と受信用に 1 つずつ使用していました。
デゴール