问题描述
我有一个有趣的问题,似乎与multicast
在较新的andriod设备上处于关闭状态(在内核中)有关,请注意,这是NOT
在多适配器上设置UDP的问题或LTE / WIFI,我知道。
许多Google搜索和尝试加载工作已提供了许多答案,例如acquire multi cast locks和一些git hub问题,人们说its impossible as devices have multicast disabled in the kernel
。我也只有found this on SO
我的代码在以下方面运行良好:-
- Nexus 5
Andriod 8.1 - API 27
- 联想平板电脑
Andriod 8.1 - API 27
也就是说,它可以发送和接收不直接针对手机IP地址的UDP数据包。
它确实不通过以下方式接收UDP数据包:-
- 像素3a
Andriod 10/11 APIS 29/30
public TestCameraPage()
{
InitializeComponent();
sendClient = new UdpClient
{
Enablebroadcast = true,ExclusiveAddressUse = false,MulticastLoopback = true
};
sendClient.Client.Bind(new IPEndPoint(IPAddress.Any,CameraPort));
Lab1.Text = "Started to listen for UDP packets";
sendClient.BeginReceive(discoverCallback,sendClient);
}
private void discoverCallback(IAsyncResult result)
{
try
{
var ep = new IPEndPoint(IPAddress.Any,CameraPort);
var data = sendClient.EndReceive(result,ref ep);
var msg = $"Received: {Encoding.UTF8.GetString(data)}";
//Sniff out camera IP
var ip = $"{data[15]}.{data[14]}.{data[13]}.{data[12]}";
Device.BeginInvokeOnMainThread(() =>
{
Lab1.Text = $"CAMERA IP: {ip} FULL MESSAGE: {msg}";
});
}
finally
{
sendClient.BeginReceive(discoverCallback,sendClient);
}
}
private void Button_OnClicked(object sender,EventArgs e)
{
var data = PollMessagetoCamera();
sendClient.Send(data,data.Length,"255.255.255.255",ListeningPort);
}
所以我的问题有两个方面
在联系和平板电脑上的示例输出
我还应该指出,我有一个控制台应用程序可以发送UDP消息,如果我使用它(像素3a的IP地址),它可以正常工作
sendClient.Send(data,"192.168.1.248",CameraPort);
如果我在控制台应用程序中使用255.255.255.255(多类型转换),则只有像素和平板电脑的像素3a无法正常显示
sendClient.Send(data,CameraPort);
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)