c++ - QTcpServer/QTcpSocket:使用 QDataStream 与直接发送 UTF-8 数据
问题描述
我即将编写一个小型服务器,使用QTcpServer
该服务器旨在通过例如 telnet 客户端进行连接。只会发送文本。
Qt 的幸运饼干服务器示例使用 aQDataStream
通过以下代码使用 a 发送文本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 字节长。
推荐阅读
- javascript - 将简单数组转换为对象
- websocket - Websocket - 突然掉线后重新建立连接
- sql - 如何在存储过程中拆分参数
- spring-boot - 通过命令行覆盖spring application.properties
- android - Android MathView 溢出屏幕宽度
- python - RabbitMq 与 WSL 和 python
- java - 如何将数组列表值返回到单独的数组中?
- css - CSS网格列忽略自动添加的元素
- java - 如何在 ubuntu 上设置系统变量并在 scala 中检索它
- asp.net - 为什么我的 web api 将 get 请求映射到我的 api 控制器中的第二个方法而不是第一个?