QTcpServer/QTcpSocket:使用 QDataStream 与直接发送 UTF-8 数据

QTcpServer/QTcpSocket: Using a QDataStream vs. sending UTF-8 data directly

我正准备使用 QTcpServer 编写一个小型服务器,旨在通过 e 连接。 G。远程登录客户端。只会发送文本。

Qt 的幸运饼干服务器示例使用 QDataStream 通过以下代码使用 QTcpSocket 发送文本:

QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_10);
out << "Some Text";
socket->write(block);

如果不想发送二进制数据,像这样直接发送 Unicode 数据(所有相关人员都知道我们使用的是 UTF-8)有什么缺点吗:

socket->write(QString::fromUtf8("Some text").toUtf8);

?

直接发送UTF-8数据没有任何缺点,但你需要有一些方法在接收端分离数据包(单元)。如果全是文本,则可以通过在接收端将传入数据拆分成行来完成。 QDataStream 不关心其中的任何一个,并且在线路级别发送已发送字节串的 32 位长度,然后是那些字节。因此,无论数据包的内容如何,​​数据包的有效载荷有多长都不会产生任何歧义:它甚至可以是 0 字节长。