【问题标题】:QTcpServer/QTcpSocket: Using a QDataStream vs. sending UTF-8 data directlyQTcpServer/QTcpSocket:使用 QDataStream 与直接发送 UTF-8 数据
【发布时间】:2019-02-09 13:30:35
【问题描述】:

我即将使用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);

?

【问题讨论】:

  • 在这两种情况下,您都将 QByteArray 作为参数传递,因此不应该有任何差异。如果您只想发送文本,则可以改用QTextStream
  • QDataStream 的主要优点是您不必关心序列化。否则你必须自己做消息分离

标签: c++ qt qt5 qtcpsocket qtcpserver


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多