如何将大文本数据从TCP套接字发送到Flutter应用程序?

时间:2019-02-03 13:48:09

标签: sockets dart flutter bigdata

我有3000行和20列数据,大多数单元具有50或80个字符长的文本。我使用渡槽和Dart Server进行了测试,以查看在服务器数据和Flutter通信之间哪个是更好的中间选择。

我使用2选项进行测试。我所能测试的是for(_socket中的var数据)运行大约10或12次才能接收整个数据。另一方面,_socket.liste丢失了许多数据。

在这两者中,我什至都使用await Future.delayed(Duration(seconds:7))... 结果是一样的。简而言之,它们都非常快。但是对于大数据,我很难获得正确的结果。

如何从tcp套接字向Flutter应用发送大文本数据?

  // OPTION 1
  _socket.listen((List<int> data) {
    String _reply = new String.fromCharCodes(data).trim();
    _reply = "$_reply$_tmpValue";
  });


 // OPTION 2
 await for (var data in _socket) {
    String _reply = new String.fromCharCodes(data).trim();
    _reply = "$_reply$_tmpValue";
  }

更新:

  final Socket client = await Socket.connect('192.168.22.120', 3000);
  client.add(utf8.encode('$_requestedData\r\n'));

  client.listen(
          (var data) {
        var ints = new Uint8List.fromList(data).buffer.asInt64List();
        ints.forEach((i) => print('Got $i'));
      },
      onDone: () { print('Done'); client.close(); },
      onError: (e) { print('Got error $e'); client.close(); });

  print('main done');

结果 主要完成 _回复: 得到了4206144564389427761 有6861850004482897203 得到了2368148215793798714

更新(有效的解决方案):

_socket = await Socket.connect('127.0.0.1’, 3000);
_socket.write(_myQuery);


await for (var data in _socket) {
  _reply = new String.fromCharCodes(data);
  _rawValue = _rawValue + _reply;

  int dataLen;
  dataLen = _reply.length;

  int carriageReturnPosition;
  carriageReturnPosition = dataLen - 2;

  int newLinePosition;
  newLinePosition = dataLen - 1;


  // In my scenario it loops 32 times and it takes about 145 seconds to get big data
  if (_reply.substring(carriageReturnPosition, newLinePosition) == '\r' &&
      _reply.substring(newLinePosition, dataLen) == '\n') {
    await _socket.close();
    _returnData = _reply;
  }
}

0 个答案:

没有答案