我试图通过TCP套接字连接到设备,从套接字写入数据并读取响应。我用C#做了一个简单的测试,它和预期的一样工作。C#代码,运行良好:
using (TcpClient client = new TcpClient(terminal.server_IP, terminal.port))
{
try
{
using (NetworkStream stream = client.GetStream())
{
try
{
stream.ReadTimeout = 5000;
byte[] msg = new byte[10];
msg[0] = 1;
msg[1] = 1;
msg[2] = 0;
msg[3] = 5;
msg[4] = 70;
msg[5] = 82;
msg[6] = 82;
msg[7] = 84;
msg[8] = 67;
msg[9] = 81;
stream.Write(msg, 0, msg.Length);
int i = 0;
while (!stream.DataAvailable && i < 5)
{
await Task.Delay(100);
i++;
}
byte[] data = new byte[4096];
int bytes = stream.Read(data, 0, data.Length);
msg = new byte[bytes];
string tst = Encoding.GetEncoding("Windows-1250").GetString(data, 2, data[1]);
}
finally
{
stream.Close();
}
}
}
finally
{
client.Close();
}
}
我需要把它转换成一个flutter应用程序,我做了代码,数据不会回来听。Flutter代码:
try {
socket?.destroy();
socket = await Socket.connect(serverIP, serverPort).catchError((error) {
print('error $e');
});
socket!.listen((data) {
print('data');
}, onError: (e) {
print('error');
socket!.destroy();
}, onDone: () {
print('done');
socket!.destroy();
}, cancelOnError: false);
List<int> message = [1, 1, 0, 5, 70, 82, 82, 84, 67, 81];
socket!.write(message);
} catch (e) {
print('errors: $e');
}
它不抛出任何错误,一切运行,但我不能从设备读取数据.有什么建议我做错了吗?
2条答案
按热度按时间z9zf31ra1#
我不确定这对你是否有用,但也许有用。
我之前试着在一个flutter应用程序中集成Web Socket,知道后端是用laravel做的,唯一对我有用的包是web_socket_channel。我希望它工作
cetgtptt2#
所以,经过几天的捆绑,我认为问题是sthe
socket!.write(message)
。我用socket!.add(message);
替换了它,它没有像预期的那样工作。把它留在这里作为证据,为将来有同样问题的人节省保存时间。