Qt TCP服务器/客户端通信

时间:2013-10-12 08:38:01

标签: qt tcp network-programming

我想发送数据数据,例如数据[] = {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,这是正确的,问题是如何存储数据并读取它。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

没有一种常用的基于IP的网络协议(UDP,TCP)可以保证您随时可以收到多少数据。在TCP中,唯一的保证是,如果你得到了数据,它就按顺序排列,但就协议而言,readData()仅用一个调用就可以了。缓冲区中可用的字节。

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