Как прекратить RawDatagramSocket.bind () после получения ровно одного ответа - PullRequest
0 голосов
/ 02 марта 2020

Я передаю UDP-запрос на прослушивание устройства, с которым я хочу связаться. Он работает нормально, но выполняется 2 раза, и я хочу завершить работу после получения ровно 1 правильного ответа от устройства

Здесь это функция, которую я использую:

static Future<Null> udpDiscovery() async {
 try {
  await RawDatagramSocket.bind(InternetAddress.anyIPv4, 8889)
      .then((RawDatagramSocket udpSocket) {
    udpSocket.broadcastEnabled = true;
    udpSocket.send(utf8.encode(Resources.requestString),
        InternetAddress("255.255.255.255"), 8139);
    udpSocket.listen((e) async {
      Datagram dg = udpSocket.receive();
      if (dg != null) {
        print("received ${dg.address.address}\n");
        print('${utf8.decode(dg.data)}\n');
        print('${dg.port}');
        if (utf8.decode(dg.data) == Resources.responseString) {
          int i = await performHandshake(dg.address.address);
          if (i == 0) discovered = true;
          udpSocket.close();
          return;
        }
        udpSocket.close();
      }
    });
  });
 } on SocketException {
  print('Socket Exception Received');
 }
}
...