2010-12-02 9 views
1

私は非常に面倒な問題があります。私はmIRC/Skypeアプリケーションを持っています。つまり、テキストと音声のチャットルームです。テキスト&のチャットルームのものはTCPを通って無事に動作し、UDPは他の接続されたクライアントに記録されたデータのみを中継します。C#udpclient/udp socket - ローカルではあるがグローバルアドレスではない

私のホームネットワーク上の2つのクライアント間で、オーディオ転送が正常に動作します。しかし、グローバルクライアントに対して、サーバは彼からのパケットを受信するか、サーバからパケットを受信します。

はここでの例です:222.222.222.222 サーバー..

サーバーのグローバルIPアドレスをクライアントがudpclientを使用しているが、結果はとにかく同じであり、それはあまりにもローカルに動作しながら、

サーバーは、UDPソケットを使用していますローカルIP:192.168.2.3 サーバポート:9999

クライアントのグローバルIP:111.111.111.111 クライアントのローカルIP:192.168.0.100 クライアントポート:8888

サーバー * 192.168.2.3にそのソケットをバインド:9999 * 111.111.111.111から受け取る:クライアント は* 192.168.0.100にそのソケットをバインド

8888:8888 *は111.111.111.111.111に送信します * 222.222.222.222から受信:9999 * 222.222.222.222に送信:9999

...私の言いたいことを得る。私はなぜデータが届かないのか分かりません。私はポート53(クライアントとサーバーの両方)で送受信を試みましたが、それは必要ではないでしょうか?私はトラフィックがとにかく(義務の呼び出しのようなゲームと同様)を通過する必要があります、いいえWindowsファイアウォールがアクティブではない、その場合はルータです。

クライアント/サーバーは、receiveFrom/sendToではなくconnect()を使用します。私もそれを使用してみましたが、違いはありません。

私はデバッグするため、その不可能のどちらかは例外か何かを得るん:(

おそらく理由何ができるか、それが世界的にローカルではなく、働くことを考えてみましょう;?私はそれが本当にファイアウォールの問題のように聞こえる同意しません、しかしI'eが..私は私のシナリオで適用thatsの方法を見てはいけない、と私はポート53と他の開いているポートにしようとした上記のような

乾杯:)

EDIT:コードのそのかなりたくさん、しかし、もし必要であればコピーすることができます

答えて

2

あなたはインターネット全体にUDPをブロードキャストすることはできません(これはあなたが 'グローバル'という意味であると仮定します)。ブロードキャストを発行しているマシンのサブネット内でのみ機能します。このため、ローカルマシンでは動作しますが、リモートマシンでは動作しません。あなたが代わりにIPマルチキャストを使用して検討する必要があります

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

一部のルータは、(あなたが制御することはできませんという)にマルチキャストパケットを許可しないよう、あなたもそれで問題を有していてもよいです転送される。

+0

例外が表示されない理由は、UDPが発火して忘れているためです。発行者はローカルセットアップで問題なくブロードキャストを送信していますが、受信者がブロードキャストを受け取ることができないという問題があります。 – MrEyes

+0

グローバルには、ローカルネットワーク上ではなく、インターネット経由のクライアントを意味します。たとえば、ローカルネット上では、グローバルIPの代わりにローカルIPを使用します。マルチキャストは、必要なゲートウェイでパケットを複製することによって複数のコンピュータに送信するだけですか?単純に1対1の接続を試してみたい – KaiserJohaan

+0

1対1の接続であれば、ブロードキャストプロトコルを使用する代わりに標準のソケット/リモーティング/ wcfを使用する必要があります。 – MrEyes

関連する問題