_udpAddr = IPAddress.Parse("228.5.6.9");
var port = 3333;
IPAddress localAddr = IPAddress.Any;
// Create endpoints
_remoteEndPoint = new IPEndPoint(_udpAddr, port);
_localEndPoint = new IPEndPoint(localAddr, port);
// Create and configure and bind UdpClient
_udpclient = new UdpClient(_localEndPoint);
// Join
_udpclient.JoinMulticastGroup(_udpAddr, localAddr);
// Start listening for incoming data
_udpclient.BeginReceive(new AsyncCallback(ReceivedCallback), null);
这是我的UDP多播加入代码。
此代码在Xamarin UWP App和仅WIFI Connect Android设备上正常工作。
但是,当Android设备连接到WIFI和LTE时,设备无法接收和发送任何东西。
所以,我这样更改了LocalEndPoint设置,
...
....
//IPAddress localAddr = IPAddress.Any;
IPAddress localAddr = IPAddress.Parse(GetLocalIPAddress());
....
..
public static string GetLocalIPAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork
&& ip.ToString().Contains("192.168."))
{
return ip.ToString();
}
}
throw new Exception("Local IP Address Not Found!");
}
使用此代码,每个Android设备都可以正常发送,但什么也没收到。
有趣的是,这两个代码都可以在UWP App上正常工作。
UWP App可以使用任何LocalEndpoint发送和接收。
多播如何在连接到WIFI和LTE的Android设备上加入?
LTE不支持组播,仅支持MMBS,这是运营商可以访问的3GPP组播变体。