如何从未来的飞镖返回套接字数据?

时间:2019-02-01 12:23:22

标签: sockets dart return future

就像我将数据发送到服务器,并使用下面===========行之间的代码将数据甚至是非常大的数据取回。这是我的实验,因为我需要一些中间解决方案,以便可以将Flutter应用程序连接到tcp套接字。为此,我选择auqeduct.io。今天,在Gazi的帮助下,我找到了可以在============行之间完成代码的解决方案。

由于我使用的auqeduct其手柄的功能看起来像这样的。

@override
  Future<RequestOrResponse> handle(Request request) async {

因此,我尝试修改代码并使用Future将套接字数据作为字符串返回。我可以使用下面的代码在===========行之间获取数据,但是我无法使用Future _handle(String _request)异步获取任何数据。

_socket.listen((data)打印数据无法将数据分配给字符串,因此我无法返回字符串。

作品: print(“((1)$ _secureResponse”);

不起作用:_secureResponse = new String.fromCharCodes(data).trim();

如果我不使用Future并将代码放在main()中,则一切运行正常。

在测试服务器中,我发送“ Hello World”,并返回“ Welcome Sir / Madam”。

我的问题是:如何从Dart中的Future中返回套接字数据?

import 'dart:async';
import 'dart:io';
import 'dart:convert';

Socket socket;
String _errorData;
String _secureResponse;

void main() async {

  var _test = await _handle(“Hello World”);
  print("Print _test: $_test");

}


Future<String> _handle(String _request) async {
  print("Future Starts Here");
  print("Request: $_request");
    _errorData = "Server_Error";
    if (_request != null) {
      print("Request has data");
      // =============================================================
      Socket _socket;
      await Socket.connect("192.168.22.120”, 3000).then((Socket sock) {
        _socket = sock;
        _socket.listen((data) {
          print("Socket start to listen to database");
          // GET FROM SERVER *********************
          _secureResponse =  new String.fromCharCodes(data).trim();
          print("(1) $_secureResponse");
        }, onError: ((error, StackTrace trace) {
          _secureResponse = _errorData;
          print("(2) $_secureResponse");
        }), onDone: ((){
          _socket.destroy();
          exit(0);
        }), cancelOnError: false);
      }).then((_) {
        print("Socket sends data to database");
        // SENT TO SERVER ************************
        _socket.write('$_request\r\n');
      }).catchError((AsyncError e) {
        _secureResponse = _errorData;
        print("(3) $_secureResponse");
        exit(1);
      });
      // ==============================================================
    } else {
      _secureResponse = _errorData;
      print("(4) $_secureResponse");
    }
  print("(6) $_secureResponse");
  print("Future Ends Here");
  return _secureResponse;
}

结果:

  1. 未来从这里开始
  2. 请求:“ Hello World
  3. 请求有数据套接字将数据发送到数据库
  4. (6)为空。 --- 预期返回“ 欢迎先生/女士
  5. 未来就此结束
  6. Print_test:--预期返回“ 欢迎您的先生/女士
  7. 套接字开始监听数据库
  8. (1)“的欢迎先生/女士

1 个答案:

答案 0 :(得分:1)

这可能有效。不过,我认为您应该阅读有关stream / futures / async / await的文章。

&   use  ^&
<   use  ^<
>   use  ^>
|   use  ^|
"   use  ""