qdatastream 在tcp 中的用法
时间: 2024-02-19 14:03:50 浏览: 27
QTcpSocket通讯发送QDataStream序列化数据
5星 · 资源好评率100%
在 TCP 中使用 QDataStream 可以方便地进行数据的序列化和反序列化。具体用法如下:
1. 在发送端,创建一个 QTcpSocket 对象,并连接到服务器:
```
QTcpSocket *socket = new QTcpSocket(this);
socket->connectToHost(hostName, port);
```
2. 在发送端,将需要发送的数据按照指定的格式写入 QDataStream 对象:
```
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out << (quint16)0; // 用于占位,等待后面填充实际数据的长度
out << data; // 需要发送的数据
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16)); // 填充实际数据的长度
```
3. 在发送端,将序列化后的数据通过 QTcpSocket 对象发送给服务器:
```
socket->write(block);
```
4. 在接收端,接收到数据后,从 QTcpSocket 对象中读取数据,并进行反序列化:
```
QDataStream in(socket);
in.setVersion(QDataStream::Qt_5_15);
if (socket->bytesAvailable() < (int)sizeof(quint16)) {
return;
}
quint16 blockSize;
in >> blockSize;
if (socket->bytesAvailable() < blockSize) {
return;
}
QString data;
in >> data;
```
其中,`setVersion(QDataStream::Qt_5_15)` 用于设置数据流的版本,避免在不同的平台上产生不兼容的问题。`bytesAvailable()` 用于获取当前可用的字节数,以判断是否已经接收完整个数据块。`quint16` 是一个无符号的 16 位整型,用于表示数据块的长度。
阅读全文