0

LAN(ローカルエリアネットワーク)環境で正常に動作するAndroidデバイスにWCF .netアプリケーションを介してUDPメッセージを送信しようとしています

しかし、その WCF サービス (MyService.svc) を PUblic IP (IIS) に展開すると、UDP パケットは正常に送信されますが、deice はそのパケットを受信しません。

UDP メッセージを送信するコード

public void SendUDPMessage(IPEndPoint ipeSender, string Message)
{
    byte[] sendBytes = Encoding.ASCII.GetBytes(Message);
    if (serverSocket == null)
       serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    serverSocket.BeginSendTo(sendBytes, 0, sendBytes.Length, SocketFlags.None, ((EndPoint)ipeSender), new AsyncCallback(OnSend), null);

}
4

1 に答える 1

1

Android デバイスがワイヤレス/セルラー ネットワーク上にあると仮定すると、事実上 NAT ファイアウォールの背後にあるため、外部から発信されるネットワーク トラフィックはすべてブロックされます。

NAT/ファイアウォールを突破するために、Android デバイスはまずサーバーにメッセージを送信する必要があります。次に、サーバーは、UDP メッセージの送信元として指定された正確なアドレスとポート番号に応答する必要があります。

NAT ホール パンチングは厄介な問題であり、多くの微妙な問題があります。ただし、サーバーに実際のパブリック IP アドレスがあり、モバイル デバイスが最初のメッセージを送信し、UDP パケットが失われる可能性のある他の何十ものことをしていない限り、それは機能するはずです (パケットが1400 バイト、最初の数バイトは Teredo トンネル、ブロックされたポートを使用するサーバー、データの送信が速すぎる、サーバー ファイアウォールの設定ミスなどのように見えます)。

于 2012-09-12T16:59:56.830 に答える