【问题标题】:Flutter/Dart UDP multicast send from iOS not receiving on Android从 iOS 发送的 Flutter/Dart UDP 多播在 Android 上未接收
【发布时间】:2022-11-09 06:38:42
【问题描述】:

通过这个设置,我已经能够让两部安卓手机发送和接收 UDP 广播。我还可以使用此设置将 UDP 广播从物理 Android 设备发送到 iPhone。

但是,我的问题是它似乎并没有反过来工作。发送函数在 iPhone 上运行,接收函数在 Android 手机上运行。 Android 手机永远不会收到广播。 iPhone的发送功能似乎有问题。这是设置:

以前为我工作的 Android 方面:

const port = 37069;
const address = '224.0.0.1';

void receive() async {
    final socket = await RawDatagramSocket.bind(address, port);
    socket.multicastHops = 1;
    socket.broadcastEnabled = true;
    socket.writeEventsEnabled = true;
    socket.listen((RawSocketEvent event) {
      print("still listening...");

      final packet = socket.receive();
      print("The packet was $packet");
      print("It came from ${packet?.address}");
    });
  }

这是iPhone方面,这似乎是问题所在。我没有收到错误,所以我想知道Info.plist 文件中是否有需要添加的权限?

void broadcast() {
    // for the iphone
    RawDatagramSocket.bind(address, port).then((RawDatagramSocket socket) {
      socket.multicastLoopback = false;
      socket.broadcastEnabled = true;
      socket.readEventsEnabled = true;
      for (int i = 0; i < 150; i++) {
        socket.send("Sent #$i".codeUnits, InternetAddress(address), port);
        print("sent $i");
      }
      socket.close();
    });
  }

我在我的项目中测试了相同的设置,它在以下情况下有效:

  1. 安卓->安卓
  2. 安卓 -> iOS

    但是,iOS -> Android 不起作用。当我运行应用程序时,我可以看到 iPhone 确实在发送数据,但 Android 没有收到任何数据。是安卓端的问题吗?我究竟做错了什么?

【问题讨论】:

    标签: android ios flutter udp multicast


    【解决方案1】:

    我最终使用了一个名为 Bonsoir 的包来实现我想要的。 它可以让你广播和接收网络服务,而且我很确定它与 Airplay 和 Google Casting 等家庭节目相同的底层技术。它也非常可靠且易于使用。

    为了发送某个字符串,我以字典的形式将字符串参数传入BonsoirService 类中的attributes 属性。

    该软件包可以在here 找到。

    【讨论】:

      猜你喜欢
      • 2019-06-17
      • 2012-06-05
      • 1970-01-01
      • 2014-08-15
      • 2015-03-14
      • 2011-10-02
      • 2020-02-21
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多