Dart - 发送UDP广播

问题描述 投票:0回答:2

我正在寻求帮助,因为我似乎找不到使用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_ADDRESS取代InternetAddress.anyIPv4,但我没有运气。我还在broadcastEnabled内找到了属性RawDatagramSocket,但我找不到有关如何使用它的更多信息。

在此先感谢您的帮助。

sockets dart udp broadcast
2个回答
2
投票

有两个问题:

  1. 使用InternetAddress.anyIPv4绑定所有网络接口;
  2. 启用与属性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);
  });
}

0
投票
socket.send(
  'HELLO!'.codeUnits,
  InternetAddress('255.255.255.255'),
  8080,
);

尝试LAN而不是WLAN。

© www.soinside.com 2019 - 2024. All rights reserved.