0

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

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,这是正确的,问题是如何存储和读取数据。

4

2 回答 2

0

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

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

qDebug() << "Data " << (int)data[k];
于 2013-10-12T08:55:21.857 回答
0

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

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

于 2013-10-12T18:54:16.230 回答