【问题标题】:Dart TCP calls not getting any responseDart TCP 调用没有得到任何响应
【发布时间】:2021-11-02 20:09:50
【问题描述】:

我正在 Dart 中重新创建一些 JavaScript 代码。

代码使用 TCP 创建与智能设备的连接,发送数据并监听响应。

JavaScript 代码

var socket = net.connect(port, ip);
socket.write(Buffer.from(data, 'hex'));
socket.once('data', (data) => {
    console.log(data);
});

我的飞镖代码

/// Creating a socket with the device ip and port
Socket socket = await Socket.connect(ip, port);          

/// Send data to the device
socket.write(data);

/// Getting first response synchronicly
Uint8List dataFromDevice = await socket.first;

print(dataFromDevice);

出于某种原因,我从未收到智能设备的任何响应。

没有错误,并且套接字对象具有连接属性。 我怀疑根本没有发送数据。

【问题讨论】:

    标签: dart tcp tcpclient


    【解决方案1】:

    您可以通过将 socket.write(data); 更改为 socket.add(data); 来解决此问题。

    固定代码

    /// Creating a socket with the device ip and port
    Socket socket = await Socket.connect(ip, port);          
    
    /// Send data to the device
    socket.add(data);
    
    /// Getting first response synchronicly
    Uint8List dataFromDevice = await socket.first;
    
    print(dataFromDevice);
    

    我有假设来说明为什么会这样。

    .write in dart 不知道如何像 JavaScript .write 那样处理一系列咬合。

    所以为了传输字节列表,我们使用.add 函数。

    【讨论】:

    • 正确。 .write 记录为“通过调用 Object.toString 将对象转换为字符串并将结果的编码添加到目标使用者。”。所以它调用.toString(),将此字符串转换为字节,然后发送它们。这与将列表的所有元素添加到套接字不同。 :)
    猜你喜欢
    • 2018-06-18
    • 2023-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多