2012-01-22 16 views
0

私はウェブで解決策を探していますが、運はありません。ローカルコンピュータからのUDPソケット、エラーコード10049

私たちはソケットを作り、データを送受信できます。クライアントとサーバーの両方のバージョンは、クライアントとサーバーとして動作しています。問題は、クライアントサーバーのバージョンIPがNATを使用するネットワーク上にあることです。つまり、サーバーがパブリックIPを持っているため、サーバーがメッセージを受信しようとしているときにパブリックIPがあり、解決策を見つけることができないデータを受け取る方法については、

SetIPProtectionLevelは無制限なので、動作するはずです。

ありがとうございました。

私たちは、サーバーバージョンのipをローカルに変更してから、クライアントからパブリックサーバーipに送信しようとしましたが、運がありません。

ローカルクライアントIPからローカルサーバIPへは動作しています。

+0

うまくいくはずです。 10049エラーは間違ったアドレスを使用していることを意味します。問題がそのエラーコードを取得している場合は、コード内に見つけて修正する必要があるバグが原因です。どのような操作でそのエラーが発生していますか?その操作で渡すパラメータは何ですか? –

+0

ここにサーバーコードが表示されます。 SN =新しいソケット(AddressFamily.InterNetwork、SocketType.Dgram、ProtocolType.Udp); IPEndPoint IEP =新しいIPEndPoint(IP、ポート)。 SN.SetIPProtectionLevel(IPProtectionLevel.Unrestricted); SN.Bind(IEP); IPEndPoint IPS =新しいIPEndPoint(IPAddress.Parse( "[my ip]")、2000); エンドポイントEP =(エンドポイント)IPS; SN.BeginReceiveFrom(BR、0、BR.Length、SocketFlags.None、ref EP、新しいAsyncCallback(OnReceive)、EP); –

+0

これはサーバーでは機能しません! UDPパケットを受信するまではIP /ポートを知ることができず、ソケットを設定するまでUDPパケットを受信することはできません!相手のIPとポートを知る前に、最初のUDPパケットを受信する前にバインドする必要があります。 –

答えて

0

NATの後ろになく、NATの背後にある側が最初のパケットを送信するという条件であれば、問題はありません。次の規則に従ってください:

1)サーバー上で、ホストにあるすべてのIPアドレスのリストを確認します。 UDPソケットをにそれぞれバインドしてください。 IPアドレス。サーバーがパブリックIPアドレスを1つしか持たず、それが到達する唯一のアドレスである場合は、これをスキップできます。

2)リクエストを受け取ったソケットと正確に同じUDP応答を送信します。これは、応答の送信元アドレスが宛先アドレスと一致するようにするために重要です。

3)クエリを受信したときと正確に同じIPアドレスとポートにUDP応答を送信します。相手のIPアドレスが何であると思っているのか、どのポートから送信してくると思っているのかについては何も無視してください。

といくつかの注意事項:

「サーバー」とは、私はNATの背後にはない側面を意味します。クライアントとサーバーの区別がない場合は、両側のサーバーのルールに従ってください。

これらのルールは、パケットが厳密には応答であるかどうかにかかわらず適用されます。彼らはあなたが相手に到達することを期待するパケットに適用されます。

NATで変更できるため、パケットのIP /ポート情報を使用してパケットの発信元を知らせることはできません。そのためには、データグラムのペイロードに十分な情報を入れなければなりません。理想的には、エンドポイントのIP /ポートはいつでも変更でき、その特定のクライアントからのパケットを最後に受信したIP /ポートにすべてのパケットを送信することを期待してください。

0

あなたのアンチウイルスソフトウェアがインストールされているかどうかを確認してください。

AVを含むファイアウォールの一部が無効になっていて、私たち自身のswが信頼できるswリストに載っていたとしても、AV swがUDPメッセージングに基づいて作成したプロセス間通信を壊したことがわかりました。 いくつかのAV製品は、IPスタックの深いところに固執して、奇妙なことが起きる可能性がある疑わしい通信を取り除くための奇妙なことをしているようです。唯一の助けとなったことは、AV保護swを削除することでした。

このような問題のほとんどのAV企業のサポートは非​​常に貧弱で、最終的に別のAV swブランドに変更する必要がありました。

関連する問題