Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sockets 如何在Dart中将标准输入套接字转换为请求套接字?_Sockets_Dart_Request_Stdin - Fatal编程技术网

Sockets 如何在Dart中将标准输入套接字转换为请求套接字?

Sockets 如何在Dart中将标准输入套接字转换为请求套接字?,sockets,dart,request,stdin,Sockets,Dart,Request,Stdin,我犯了一个错误 未处理的异常:NoSuchMethodError:将字符串发送到socket.write时,对null调用了方法“write” 另一方面,如果我将stdin连接到插座,则可以正常工作。在下面的代码中,如果您注释socket.write('$\u request\r\n');并取消对stdin.listen的注释((data)=>您将看到一切都按其应有的方式工作 是硬编码的,但它可能来自internet或其他客户端。我尝试遵循一些示例,但不理解为什么stdin.listen是有效

我犯了一个错误

未处理的异常:NoSuchMethodError:将字符串发送到socket.write时,对null调用了方法“write”

另一方面,如果我将stdin连接到插座,则可以正常工作。在下面的代码中,如果您注释socket.write('$\u request\r\n');并取消对stdin.listen的注释((data)=>您将看到一切都按其应有的方式工作

是硬编码的,但它可能来自internet或其他客户端。我尝试遵循一些示例,但不理解为什么stdin.listen是有效的而不是标准字符串

所以我的问题是如何在Dart中将标准输入套接字转换为请求套接字

这是@Gazi的工作代码帮助:

更新:

Socket.connect("192.168.22.120", 3000)
          .then((Socket sock) {
    socket = sock;
    socket.listen(dataHandler,
            onError: errorHandler,
            onDone: doneHandler,
            cancelOnError: false);
  }).then((_) {
    print(_request); // so that your code runs AFTER the TCP/IP connection
    socket.write('$_request\r\n');
  })
  .catchError((AsyncError e) {
    print("Unable to connect: $e");
    exit(1);
  });

如果这是您的代码,下面是发生的情况:

.then()
部分中的代码运行时间比下面的
套接字.write()
要晚。
.then()
正在分配回调函数并继续运行。紧接着就是
套接字.write()调用下面的
。之后,一旦建立TCP/IP连接,就会执行
socket=sock
。因此,调用
socket.write()
时,不会分配
socket
变量

以下是stdin行发生的情况:
(数据)=>socket。单击键盘后执行write
代码。这发生在TCP/IP连接建立后。因此,您的
socket
被分配

以下是您应该做的:

  Socket.connect("192.168.22.120", 3000)
          .then((Socket sock) {
    socket = sock;
    socket.listen(dataHandler,
            onError: errorHandler,
            onDone: doneHandler,
            cancelOnError: false);
  }).then((_) {
    print(_request); // so that your code runs AFTER the TCP/IP connection
    socket.write('$_request\r\n');
  })
  .catchError((AsyncError e) {
    print("Unable to connect: $e");
    exit(1);
  });


因此,您的代码在TCP/IP连接之后运行。如果您使用async/await,它将更简单。

我遇到了这个错误:参数类型“()→ dart.core::Null“无法分配给参数类型”(动态)→ dart.async::FutureOr'。尝试更改参数的类型,或将参数强制转换为“(动态)→ 然后(({谢谢,我加了下划线。})。然后({和它的工作原理让我来修复代码,对不起,我没有测试它:)没关系。这在main内部工作,但在将来不起作用。我有一个新的问题,如果你能在那里贡献我将不胜感激。
  Socket.connect("192.168.22.120", 3000)
          .then((Socket sock) {
    socket = sock;
    socket.listen(dataHandler,
            onError: errorHandler,
            onDone: doneHandler,
            cancelOnError: false);
  }).then((_) {
    print(_request); // so that your code runs AFTER the TCP/IP connection
    socket.write('$_request\r\n');
  })
  .catchError((AsyncError e) {
    print("Unable to connect: $e");
    exit(1);
  });