2012-09-10 45 views
0

我試圖通過WCF .NET應用程序發送UDP消息到Android設備,在局域網工作正常(局域網)環境.NET:發送UDP消息不上公網IP的工作

但是當我部署該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); 

} 
+1

您是否使用WireShark等網絡嗅探器來驗證數據包實際上是通過網絡發送的? – akton

回答

1

假設Android設備是一個無線/蜂窩網絡上,它實際上是一個NAT防火牆後面,所以它起源外部的任何網絡通信將被阻止。

爲了穿透NAT /防火牆,Android設備需要先向服務器發送消息。然後,服務器必須響應作爲UDP消息源提供的確切地址和端口號。

NAT打孔是一個凌亂的主題,這很多細微的問題。但是,只要服務器有一個真實的公共IP地址,移動設備發送第一條消息,並且不會執行導致UDP數據包丟失的其他許多事情(數據包大於1400字節,前幾個字節看起來像Teredo隧道,服務器使用阻塞端口,發送數據太快,服務器防火牆配置錯誤等)。