udpClient.在MonoDroid + Simulator下,Receive不接收任何UDP数据报
本文关键字:任何 数据报 UDP Receive MonoDroid Simulator udpClient | 更新日期: 2023-09-27 18:08:39
使用以下代码位,我在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();
欢呼,帕特里克。
奇数;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
权限,这是所有与网络相关的操作所必需的。