QtQLocalSocket和QLocalServer问题接收不到数据、只能收到第一条、数据不完整解决方案2023.05.24
简介
Qt很强大,但是Qt的帮助文档、API属实是让我们走不少弯路。QLocalSocket一个很简单的东西,我仅想用来实现一个简单的本地进程通信,就遇到了:客户端循环发送数据,服务端只能接收到一条、接收到数据不完整等奇奇怪怪的现象。
最郁闷的是,网上很多教程说的都是错的😒。
场景
我的应用场景就是很简短的报文发送,最大几K、几十K。每个报文需要独立,因为我不想再处理拆包,粘包等问题🫠。
先了解下QLocalSocket、QLocalServer的使用
1. 服务端
//
QLocalSocket 是一个基于流的 IPC(进程间通信) 套接字。它允许我们通过本地套接字在同一台主机上的两个进程之间传输数据流。
与TCP、UDP一样也分服务端和客户端。Qt的QLocalSocket在windows上底层实现是管道,在unix上实现是本地域socket。
本项目是服务端,服务端的创建代码如下:
第一步,new QLocalServer对象
第二步,监听连接名
第三步,连接并实现客户端连接信号的槽函数
第四步,连接到来时获取连接套接字
第五步,连接并实现客户端断开连接信号的槽函数
第六步,连接并实现消息到来取消息的槽函数
第七步,读全部数据,打印
上面的流程,采用connect机制,全异步方式处理信号,没有阻塞等待
三个connect 分别处理:客户端连接、接收到数据、客户端断开连接的消息or信号。
// 注意事项
上面服务端的建立是写在了ui的构造函数里面,如果信号多的情况,ui是会卡顿,因为事件循环还是在一个主线程里面。
对应服务端代码
QLocalServer * pLocalServer = new QLocalServer(this); //第一步,new 对象
if (pLocalServer == nullptr)
{
qCritical() << __FILE__ << __LINE__ << "pLocalServer is nullptr!";
}
else
{
if (pLocalServer->listen(LOACL_SOCKE
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgbjffk
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01