0

我正在尝试通过 WCF .net 应用程序将 UDP 消息发送到 Android 设备,该设备在 LAN(局域网)环境中工作正常

但是当我将该 WCF 服务 (MyService.svc) 部署到公共 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 回答