如何解决在内核级别禁用Android UDP多播?
我有一个有趣的问题,似乎与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 举报,一经查实,本站将立刻删除。