Socket.io 如何使用套接字数据返回Response.ok?
我可以将我的导水管连接到关闭网络套接字(侦听器并获取数据)问题是我无法返回新的响应。ok。它显示空 我使用的是导水管3.0。大多数文档看起来像是片段。我很难使用省道插座。但现在我可以从套接字中获取文本,并且我不能从我的AqueductWebAPI通过互联网发送数据Socket.io 如何使用套接字数据返回Response.ok?,socket.io,dart,aqueduct,Socket.io,Dart,Aqueduct,我可以将我的导水管连接到关闭网络套接字(侦听器并获取数据)问题是我无法返回新的响应。ok。它显示空 我使用的是导水管3.0。大多数文档看起来像是片段。我很难使用省道插座。但现在我可以从套接字中获取文本,并且我不能从我的AqueductWebAPI通过互联网发送数据 class LoginController extends Controller { String _xCustomerToken; String _xCustomerName; var list = []; @override F
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
Socket.connect('192.168.1.22’, 1024).then((socket) async {
socket.listen((data) async {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print(
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}, onDone: () {
print("Done");
});
socket.write('Q101:_:49785:_:x\r\n');
});
// CANT RETURN THE SOCKET DATA
return new Response.ok(
// EXAMPLE: "Customer Token: null, CustomerName: null”
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
更新:
我把return语句放在wait for(listen)中,现在只要我输入,就可以正确地获得信息
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
String _xResult;
var list = [];
@override
Future<RequestOrResponse> handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22', 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
var list = reply.split(":_:");
_xCustomerToken = list[2];
_xCustomerName = list[3];
_xResult = "$_xCustomerToken:_:$_xCustomerName";
print("$_xResult");
return new Response.ok("$_xResult");
}
return new Response.ok("No data");
}
}
类登录控制器扩展控制器{
字符串xCustomerToken;
字符串xCustomerName;
字符串xResult;
var列表=[];
@凌驾
未来句柄(请求)异步{
字符串回复;
var socket=await socket.connect('192.168.1.22',1024);
socket.write('Q101::49785::x\r\n');
等待(套接字中的var数据){
reply=等待新字符串.fromCharCodes(data).trim();
var list=reply.split(“:\”);
_xCustomerToken=列表[2];
_xCustomerName=列表[3];
_xResult=“$\u xCustomerToken:$\u xCustomerName”;
打印($xResult);
返回新的响应。确定($xResult);
}
返回新的响应。正常(“无数据”);
}
}
The.listen()
不会等待完成以执行其余的代码,然后点击返回新的响应。确定(“客户令牌:$\u xCustomerToken,CustomerName:$\u xCustomerName”)代码>带空值的右波纹管。您可以尝试改用wait for:
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22’, 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}
return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
谢谢Leo,我修改并更新了我的代码。如果我把return语句放在里面,等待它工作。