我想发送数据数据,例如数据[] = {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,这是正确的,问题是如何存储数据并读取它。
答案 0 :(得分:0)
无法正常工作,您究竟是什么意思? 代码看起来不错。但是,您应该知道在每种情况下都不会一起收到所有字节。您还可以获得一个可用2个字节的事件,另一个可用3个字节的事件。
您的问题可能是您的调试打印,它将数据解释为字符代码而不是数字?尝试
qDebug() << "Data " << (int)data[k];
答案 1 :(得分:0)
没有一种常用的基于IP的网络协议(UDP,TCP)可以保证您随时可以收到多少数据。在TCP中,唯一的保证是,如果你得到了数据,它就按顺序排列,但就协议而言,readData()
仅用一个调用就可以了。缓冲区中可用的字节。
您忽略data.length()
是不正确的。您的循环只能迭代data.length()-1
。无法保证data.length()
有多大。它不会为零,但例如可能为1。