【问题标题】:.net: send UDP message does not working on Public IP.net:发送 UDP 消息在公共 IP 上不起作用
【发布时间】:2012-09-10 08:09:19
【问题描述】:

我正在尝试通过 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);

}

【问题讨论】:

  • 您是否使用过像 WireShark 这样的网络嗅探器来验证数据包实际上是通过网络发送的?

标签: .net wcf service udp


【解决方案1】:

假设 Android 设备位于无线/蜂窝网络上,它实际上位于 NAT 防火墙后面,因此任何源自外部的网络流量都将被阻止。

为了穿透 NAT/防火墙,Android 设备需要先向服务器发送消息。然后服务器必须响应作为 UDP 消息源给出的确切地址和端口号。

NAT 打孔是一个杂乱无章的主题,其中包含很多微妙的问题。但只要服务器有一个真实的公共 IP 地址,移动设备发送第一条消息,并且你没有做任何其他可能导致 UDP 数据包丢失的事情(数据包大于1400 字节,前几个字节看起来像 Teredo 隧道,服务器使用阻塞端口,发送数据太快,服务器防火墙配置错误等)。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多