gpt4 book ai didi

sockets - Dart - 发送 UDP 广播

转载 作者:行者123 更新时间:2023-12-03 02:41:00 26 4
gpt4 key购买 nike

我正在寻求帮助,因为我似乎找不到使用 Dart 在本地网络内发送 UDP 广播的方法。

到目前为止,我设法使用 UDP 与 RawDatagramSocket 进行通信。 .我可以向特定地址发送消息。

我不能做的是向本地网络内的任何设备发送广播(网络掩码是 255.255.255.0),并等待可能的(多个)答案。这是我正在使用的代码:

RawDatagramSocket.bind('127.0.0.1', 8889)
.then((RawDatagramSocket udpSocket) {
udpSocket.listen((e) {
Datagram dg = udpSocket.receive();
if (dg != null) {
//stuff
}
});
udpSocket.send(utf8.encode('TEST'), DESTINATION_ADDRESS, 8889);
});

我试图替换 DESTINATION_ADDRESSInternetAddress.anyIPv4 ,但我没有运气。我还找到了 broadcastEnabled 的属性里面 RawDatagramSocket ,但我找不到有关如何使用它的更多信息。

提前感谢您的帮助。

最佳答案

有两个问题:

  • 使用InternetAddress.anyIPv4用于绑定(bind)所有网络接口(interface);
  • 使用属性 broadcastEnabled 启用广播权限

  • 显然使用广播地址:对于 /24网络使用 x.y.z.255地址。

    这个片段有效:
    import 'dart:io';
    import 'dart:convert';

    main() {

    var DESTINATION_ADDRESS=InternetAddress("x.y.z.255");

    RawDatagramSocket.bind(InternetAddress.anyIPv4, 8889).then((RawDatagramSocket udpSocket) {
    udpSocket.broadcastEnabled = true;
    udpSocket.listen((e) {
    Datagram dg = udpSocket.receive();
    if (dg != null) {
    print("received ${dg.data}");
    }
    });
    List<int> data =utf8.encode('TEST');
    udpSocket.send(data, DESTINATION_ADDRESS, 8889);
    });
    }

    关于sockets - Dart - 发送 UDP 广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327927/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com