Peer to Peerを使用して、インターネットを介したネットワークをゲームに追加しようとしています。.NETのピアツーピアクラスを使用してローカルネットワーク内で接続するLANのみのバージョンをすでに実装しています。
ファイアウォールの背後にある他のクライアントへの接続を確立するには、UDPホールパンチングを使用する必要があることに気付きました。
これが私がそれを実装し始めた方法です:サーバーは仕事を成し遂げるために非常に単純なPHPスクリプトを使用するHTTPサーバーです。
- サーバーに名前を登録し、プライベートIPアドレスとポートをGET変数として送信します
- サーバーが登録要求を受け取ると、パブリックエンドポイントとプライベートエンドポイントが保存されます
- 別のクライアントへの接続を要求します。
- サーバーはクライアントのプライベートエンドポイントとパブリックエンドポイントを返します
- 2秒ごとに、2番目のクライアントがサーバーにチェックインし、サーバーに接続しようとしている別のクライアントがある場合は、そのエンドポイントも取得します。
- 両方のクライアントは、有効な応答が得られるまで、パブリックエンドポイントを互いにスパムし始めます
今、私はたくさんの質問があります
- サーバーをHTTPサーバーにすることはできますか?
- HTTPサーバーにリクエストを送信すると、リクエストが行われるたびにクライアントポートが変更されます。プライベートエンドポイントは常に同じパブリックエンドポイントと一致しますか?
- サーバーへのリクエストには、クライアントへのUDPメッセージと同じソースエンドポイントが必要ですか?
- 指定されたソースエンドポイントを使用してC#でHTTPサーバーに接続する方法はありますか?
- 私の実装に問題はありますか?
ありがとう!