Android模拟器上的UDP广播

时间:2017-07-14 18:18:57

标签: c# networking xamarin android-emulator

我正在使用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,则按预期工作。

任何想法如何让广播数据包到达本地网络?

1 个答案:

答案 0 :(得分:1)

至少在Android模拟器上,似乎使用“ 10.0.2.2”地址是正确的路径。 “ IPAddress.Broadcast”常量的用法仅在物理设备上有效。在仿真器上,无法发送标准广播消息。这是因为Android模拟器具有特殊的网络配置才能工作。创建了一个专用网络,并且该网络可能没有将广播消息重定向到主机网络。