【问题标题】:Qt TCP server/client communicationQt TCP 服务器/客户端通信
【发布时间】:2013-10-12 08:38:01
【问题描述】:

我想发送数据数组,例如data[] = {0x1, 0x2, 0x3, 0x4, 0x5},从 TCP 服务器到客户端。我为此编写了以下代码,

void server::sendData()
{
   QByteArray data;
   data.resize(5);

   data[0] = 0x1; 
   data[1] = 0x2;
   data[2] = 0x3;
   data[3] = 0x4;
   data[4] = 0x5;

  socket->write(data);  
}

现在客户是

void client::readData()
{
    qDebug() << "Bytes available: " << socket->bytesAvailable();
    QByteArray data = socket->readAll();
    for( int k = 0; k< 5; k++)
    {
       qDebug() << "Data " << data[k];
     }
}

但它不起作用。如何在客户端读取接收到的数组? 接收到的字节数是5,正确,问题是如何存储和读取数据。

【问题讨论】:

    标签: qt tcp network-programming


    【解决方案1】:

    不工作到底是什么意思? 代码看起来不错。但是,您应该知道,您不会在每种情况下都一起接收所有字节。您还可以获得一个可用 2 个字节的事件和另一个可用 3 个字节的事件。

    您的问题可能是您的调试打印,它将数据解释为字符代码而不是数字?试试

    qDebug() << "Data " << (int)data[k];
    

    【讨论】:

      【解决方案2】:

      常用的基于 IP 的网络协议(UDP、TCP)都不能保证您随时会收到多少数据。在 TCP 中,唯一的保证是,如果你得到数据,它是有序的,但就协议而言,如果在缓冲区中只有一个可用字节来调用 readData() 就很好了。

      您忽略data.length() 是不正确的。您的循环最多只能迭代到data.length()-1。无法保证 data.length() 的大小。例如,它不会为零,但可能是 1。

      【讨论】:

        猜你喜欢
        • 2012-04-19
        • 1970-01-01
        • 2013-12-14
        • 1970-01-01
        • 2021-02-05
        • 2017-07-16
        • 2023-03-18
        • 2016-05-16
        • 2012-04-21
        相关资源
        最近更新 更多