2011-08-11 11 views
3

TCPとUDPの両方を使用するサーバーとクライアントを作成しようとしています。サーバーはLAN設定ではうまく動作しますが、WAN経由で送信された場合はUDPメッセージは受信されません。私は、データを送信するために使用されたUDPソケットが、情報を返すのに十分な長さのNATテーブルに残っていないためだと考えています。 UDPポートをルータで開いたままにする(ポート転送なしで)か、すでに接続されているTCP接続と同じポートをUDPに使用する方法はありますか?前もって感謝します。WAN上のTCPおよびUDPソケットサーバー

答えて

2

トラフィックが発生していない場合は、ファイアウォールによってブロックされている可能性があります。この場合、それは転送についてではなく、ポートを開くことです。

NAT /ファイアウォールデバイスでは、ほとんどの場合(すべてではないにしても)、NATを介して穴を開けるとUDPトラフィックが両方向に送信されます。つまり、NAT /ファイアウォールの背後にある私のラップトップがUDPパケットをインターネットに送り出すと、私のNAT /ファイアウォールは、元のポート番号にUDPトラフィックを戻すことができます。私はUDPでたくさん働いています。私の経験では、これはルールであり、例外はほとんどありません。

UDPパケットは配信されないことに注意してください。

クライアントはNATの後ろにいますか?クライアントから送信されたパケットはすべてサーバーに送信されますか?サーバーからクライアントへの方向で問題がありますか?

UDPとTCPに同じポート番号を使用しても、状況は変わりません。別のプロトコルであるため、TCP接続にピギーバックすることはできません。

Network Address Translation (NAT) Behavioral Requirements for Unicast UDP

http://en.wikipedia.org/wiki/UDP_hole_punching

+0

はい問題は、クライアント方向へのサーバです。あなたが言ったことに問題があると私は信じています。私は現在、UDP送信が最初に送信されたポートを使用していないため、NAT経由で戻ってきません。私はこれに対応するためにクライアントとサーバーの両方を調整しようとします。答えをありがとう。 – Stephen

+0

あなたが示唆したことを試みましたが、それでも失敗しました。私はサーバーがWAN IPと接続時にユーザーから送信されたポートを取得し、クライアントはサーバーからの通信のためにすべてのポートでリッスンしています。いくつかのコードを見て、目に見える間違いがないかどうかを確認することは可能でしょうか?それは有り難いです。 – Stephen

+0

@Stephen。確かに。あなたの質問へのリンクを追加してください。私はそれを行う方法は、サーバー側でrecvfrom()とsendto()を使用しています。そのソケットを特定のポート番号にバインドします。クライアント側では、単一のソケットを使用するようにしてください。 –

関連する問題