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

C++ QTcpServer/QTcpSocket:使用QDataStream与直接发送UTF-8数据,c++,qt,qt5,qtcpsocket,qtcpserver,C++,Qt,Qt5,Qtcpsocket,Qtcpserver,我将使用qtcserver编写一个小型服务器,该服务器将通过e连接。Gtelnet客户端。只发送文本 Qt的fortune cookie服务器示例使用QDataStream通过以下代码使用qtcSocket发送文本: QByteArray block; QDataStream out(&block, QIODevice::WriteOnly); out.setVersion(QDataStream::Qt_5_10); out << "Some Text"; socket-&

我将使用
qtcserver
编写一个小型服务器,该服务器将通过e连接。Gtelnet客户端。只发送文本

Qt的fortune cookie服务器示例使用
QDataStream
通过以下代码使用
qtcSocket
发送文本:

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

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

在这两种情况下,您都将
QByteArray
作为参数传递,因此不应该有任何差异。如果只想发送文本,可以使用
QTextStream
。QDataStream的主要优点是不必关心序列化。否则,您将不得不自己进行消息分离
socket->write(QString::fromUtf8("Some text").toUtf8);