在内核级别禁用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

Xamarin表单代码可以复制以下内容

    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);
    }

所以我的问题有两个方面

  1. 是否可以接收在新的Andriod手机上直接广播到设备的 NOT UDP数据包?
  2. 如果可能的话,我需要做些什么来解决它?

在联系和平板电脑上的示例输出

screen shot showing expected output

我还应该指出,我有一个控制台应用程序可以发送UDP消息,如果我使用它(像素3a的IP地址),它可以正常工作

sendClient.Send(data,"192.168.1.248",CameraPort);

如果我在控制台应用程序中使用255.255.255.255(多类型转换),则只有像素和平板电脑的像素3a无法正常显示

sendClient.Send(data,CameraPort);

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)