Получение данных из TCP Socket withost с помощью listen () во Flutter - PullRequest
0 голосов
/ 08 мая 2020

Мне нужен способ получения данных (внутри приложения Flutter) с TCP Java сервера, который я сделал, но без использования метода Socket socket.listen(). Мне нужно что-то вроде socket.read(), которое может вернуть Future<Uint8List>, чтобы я мог дождаться этого. Есть ли что-то подобное?

1 Ответ

0 голосов
/ 10 мая 2020

Даже если бы такой метод существовал (кстати, RawSocket имеет такую ​​функцию, но он неблокирующий и будет возвращать только то, что доступно - потенциально нулевые байты), у вас все равно будет пара проблем.

Будущее будет завершено произвольным количеством байтов, и это может быть не все сообщение, поэтому вам придется сохранить эти байты и подождать еще.

Вероятно, что более важно, как бы вы использовать такой метод? Может быть, вот так?

Future<Uint8List> readBytes() async {
  return await _socket.read(); // NB no such method really exists
}

но как вы тогда это используете?

readBytes().then((bytes) {
  // process the bytes
});

но это не проще, чем

socket.listen((bytes) {
  // process the bytes
});

Возможно, вы можете объяснить, что вам не нравится listen или почему вы не можете его использовать. Помните, что блокирующие чтения, которые вы можете использовать в Java, обычно выполняются в фоновых потоках, которых у вас нет в Dart.

...