我正在使用Xamarin开发Android应用。此应用程序在特定端口上发送UDP广播,该端口由同一网络上的设备接收,然后设备将一些数据回复给应用程序。可以有多个设备,因此应用程序会一直读取UDP响应,直到超时。
现在的设备是在主机上运行的简单c#windows窗体应用程序,并且应用程序在Android模拟器上运行。
问题是主机(也不是设备应用程序)在端口上接收任何数据包。
这是在Android应用程序上发送广播的代码:
public async Task SendBroadcast()
{
UdpClient c = new UdpClient();
c.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
c.EnableBroadcast = true;
string msg = "...device_key...";
await c.SendAsync(Encoding.ASCII.GetBytes(msg), msg.Length, new IPEndPoint(IPAddress.Broadcast, 55566));
}
如果我更改IPAddress.Broadcast
以使用主机地址10.0.2.2
,则按预期工作。
任何想法如何让广播数据包到达本地网络?
答案 0 :(得分:1)
至少在Android模拟器上,似乎使用“ 10.0.2.2”地址是正确的路径。 “ IPAddress.Broadcast”常量的用法仅在物理设备上有效。在仿真器上,无法发送标准广播消息。这是因为Android模拟器具有特殊的网络配置才能工作。创建了一个专用网络,并且该网络可能没有将广播消息重定向到主机网络。