2013-10-12 356 views
0

我想发送数据数组,例如数据[] = {0x1,0x2,0x3,0x4,0x5},从TCP服务器到客户端。我写了下面的代码,Qt 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,这是正确的,问题是如何存储数据并读取它。

回答

0

你究竟是什么意思不起作用?代码看起来不错。但是,您应该知道,在任何情况下都不会收到所有字节。你也可以得到一个2字节的事件,另一个3字节的事件。

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

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

无常用的基于IP的网络协议(UDP,TCP)保证你会多少数据在任何时刻接收任何东西。在TCP中,唯一的保证是,如果你得到的数据是按顺序存在的,但就协议而言,readData()只用缓冲区中的一个字节就可以调用。

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