微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在内核级别禁用Android UDP多播?

如何解决在内核级别禁用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 举报,一经查实,本站将立刻删除。