【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】

这篇具有很好参考价值的文章主要介绍了【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Qt】QLocalSocket与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是会卡顿,因为事件循环还是在一个主线程里面。文章来源地址https://www.toymoban.com/news/detail-461782.html

对应服务端代码


	QLocalServer * pLocalServer = new QLocalServer(this); //第一步,new 对象

	if (pLocalServer == nullptr)
	{
   
		qCritical() << __FILE__ << __LINE__ << "pLocalServer is nullptr!";
	}
	else
	{
   
		if (pLocalServer->listen(LOACL_SOCKE

到了这里,关于【Qt】QLocalSocket与QLocalServer问题:接收不到数据、只能收到第一条、数据不完整解决方案【2023.05.24】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 因为axios请求后端,接收不到token的问引出的问题

    相关概念 什么是跨域? 跨域指的是在浏览器环境下,当发起请求的域(或者网站)与请求的资源所在的域之间存在协议、主机或端口中的任何一个条件不同的情况。换句话说,只要协议、主机或端口中有一个不同,就会被认为是跨域请求。 具体来说,以下情况都属于跨域请

    2024年02月10日
    浏览(46)
  • vue3父组件异步props传值,子组件接收不到值问题

    当我们使用vue3进行开发在创建组件的时候,子组件经常需要调用父组件的数据,那么这是就需要vue3的props进行对父组件与子组件通信来达到传值的效果 在使用props进行父子组件通信时,子组件无法成功渲染数据,导致拿到数据为空问题 提示:这里填写问题的分析: 在使用

    2024年02月11日
    浏览(41)
  • CAN接收不到数据时的处理方法

    在调试CAN通讯协议时,经常会遇到无法接收到数据的情况,这个时候可以采用单步调试DEBUG的方法,先观测CAN接收寄存器RFIFO0或者RFIFO1的值是否会发生变化,即是否真的接收到了数据。 如果寄存器RFIFO0或者RFIFO1如上图所示接收到了数据,但是仍旧没有收到数据,这个时候首先

    2024年02月16日
    浏览(37)
  • @RequestBody接收不到前端传递过来的json数据

    我刚开始只是写@RequestBody ParkingRecord parkingRecord 一直获取的都是null, 直到用了Map标签才终于获取到参数了 获取到map的key,就可以获取值了 有人说是前后端参数名称不一致:在实体类的属性上加一个注解 然而这个没有解决我的问题 也有人说是因为lombok的问题,自己用idea的快捷

    2024年02月12日
    浏览(54)
  • watch监听,解决Vue3父组件异步props传值,子组件接收不到的问题

    写静态数据的时候父组件传值子组件接收并渲染是没问题的,但当父组件异步获取数据,子组件接收数据会晚于渲染,就会产生接收不到的问题,我在用echarts绘制图表时图表就直接不显示  用watch监听props数据并在watch内进行赋值操作可解决该问题 直接上代码 父组件,vue3语法

    2024年02月15日
    浏览(44)
  • websocket连接成功但是前端接收不到数据-gateway造成

    问题描述 前端直接连接websocket服务数据正常返回,连接网关gateway后,连接返回状态101连接成功,gateway无报错信息,websocket服务后台也正常收到连接和返回数据,但是前端一直没有收到数据。 原因分析: gateway对websocket返回的数据大小有限制,重新配置了gateway对websocket数据的

    2024年02月12日
    浏览(47)
  • 【QT实现TCP数据发送和接收】

    单客户端服务器实现代码: 在.pro文件添加 在头文件中添加 在源文件中添加

    2024年02月11日
    浏览(53)
  • 解决ES只能查询10000条数据的问题

    这篇文章是翻译过来的,原文在此,需要科学上网。 当查询页很深或者查询的数据量很大时,深查询就会出现。es 的自我保护机制允许的一次最大查询量是 10000 条数据。在请求中加入 trackTotalHits(true) 可以解除10000条的上限。 from size 这种实现方式有点类似于 MySQL 中的 limit。

    2024年02月12日
    浏览(33)
  • Qt程序接收串口数据存在延迟解决办法

    在调试接收串口数据的Qt程序中发现,数据存在延迟和粘包现象。下位机发送数据包频率是100Hz,一包56字节,波特率115200,在打印 port-readAll() 的值的时候发现并不是每10ms读到一包数据,而是大概每50ms左右一次接收到5包数据,在其他电脑上调试,以及下载其他串口助手调试后

    2024年02月04日
    浏览(48)
  • QT串口接收数据并进行波形显示(含源码)

    ** 使用QT在串口调试助手基础上实现波形显示(含源码) 评论比较多留言需要源码的,逐个发邮箱比较麻烦也不能及时回复,现将源码上传至链接(无需积分下载)https://download.csdn.net/download/m0_51294753/87743394,下载不下来可以私信我留邮箱。 一、前言 背景:使用ADS1255对模拟信

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包