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