を使用して、私はおそらくここにどこかに答えた一般的な質問を持っていますが、検索を使用することは非常に生産的ではなかったです。だから、私は再確認し、それについてのスレッドがある場合は、そこに私を指摘してください。ありがとう。ピア・ツー・ピアのNATの背後にあるC#
したがって、一般的な考えは次のとおりです。 私たちには、サーバー全体のトラフィックをルーティングせずにお互いに話したい2つの.NET書込みクライアントがあります。さらに、両方のクライアントが.NETベースである必要はありませんが、いずれの場合もあります(別のものはObjective-C、UnixなどのC++でもかまいません)。
考え方は次のとおりです。
- NATは、クライアントがアドレス10.0.0.1:1234上にあり、サーバーがアドレス70.0.0.7:4567上にあることを覚えているように、第1のクライアントは、いくつかのサーバーへの接続を確立します。したがって、70.0.0.7がパケットをNATに送り返すと、NATはそれをクライアントにマスカレードする方法を知るでしょう。
- 第NATは、アドレス192.168.0.1:19234に内部クライアントがアドレス70.0.0.7:7654上のサーバに接続されていることを記憶し、他にもパケットをバック受け入れることができるようになりますので、第2のクライアントは、同じサーバーへの接続を確立192.168.0.1:19234
- 今、私たちは192.168.0.1:19234へ10.0.0.1:1234からの接続を作成する必要があります。
両方のC#クライアントは、それぞれのエンドポイントについて知ることができます(サーバーがNAT付きアドレスを保持していて、Client1 - 111.0.0.1:1111とClient2 - 222.0.0.2:2222)。 必要なことである - クライアント1がSocket.Connect拳を呼び出すことなく222.0.0.2:2222に直接パケットを送信することが可能とクライアント2のためにもSocket.Connectを呼び出すことなく111.0.0.1:1111にパケットを送信するために。
はようやくなどの標準的なソケットを使用して、特別なライブラリを使用せずに、.NETで行うことが可能ということですか?
に似た何かをしたいような音 –
@Tony The Tiger:ファイアウォールが接続を許可しないため。 NATは、レコード10.0.0.1:1234 <-> 111.0.0.1:1111をマスカレードしているが、それは111.0.0.1:1111 –