首页 文章

udpClient.Receive在MonoDroid Simulator下没有收到任何UDP数据报

提问于
浏览
0

使用下面的代码,我在MonoDroid模拟器下没有收到任何UDP数据报 . 但是相同的代码在MonoTouch下运行良好......

好的,我知道没有保证同一段代码在不同平台上的工作方式类似 . 但最终,我希望在iOS和Android上使用C# .

System.Threading.Thread udpListener = new System.Threading.Thread(() =>
 {
   System.Net.Sockets.UdpClient udpClient = new System.Net.Sockets.UdpClient(UDP_PORT);
   while (true)
   {
     try
     {
       System.Net.IPEndPoint sender = new System.Net.IPEndPoint(System.Net.IPAddress.Any, 0);
       byte[] bytes = udpClient.Receive(ref sender);
       using (System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes))
       {
         System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyMessageList));
         MyMessageList messages = serializer.Deserialize(ms) as MyMessageList;
         if (messages != null) ParseNotificationMessages(messages);
       }
     }
     catch (System.Exception exp)
     {
     }
   }
 });
 udpListener.IsBackground = true;
 udpListener.Start();

干杯,帕特里克

2 回答

  • 1

    不确定它是否适用于monodroid,但对于使用UDP的一般android测试,你应该检查答案:How to receive data using UDP in Android?

    希望这可以帮助 .

  • 0

    奇; UDP应该可以工作,因为这是我们的测试之一:

    int Port = 9595;
    
    var server = new UdpClient(Port);
    server.BeginReceive(result => {
            IPEndPoint sender = null;
            var data = server.EndReceive(result, ref sender);
            var value = Encoding.Unicode.GetString (data);
            if (value != "hello there!")
                throw new InvalidOperationException ("UDP data transfer failed!");
            RunOnUiThread (() => textview.Text += "\n\nRead data from UDP: " + value);
            server.Close ();
    }, null);
    
    using (var client = new UdpClient()) {
        var bytes = Encoding.Unicode.GetBytes("hello there!");
        client.Send(
            bytes,
            bytes.Length,
            new IPEndPoint(IPAddress.Loopback, Port));
    }
    

    现在,上面的代码使用环回设备而不是“真正的”设备,但我希望/期望它能够工作......

    您想从哪个端口读取? Android确实使用Linux内核,因此只有授权用户才能访问小于1024的端口 .

    另一种可能性是您错过了 android.permission.INTERNET 权限,这是所有与网络相关的操作所必需的 .

相关问题