• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

QtQLocalSocket和QLocalServer问题接收不到数据、只能收到第一条、数据不完整解决方案2023.05.24

武飞扬头像
MFC不精通不改名
帮助1

学新通

简介

  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
系列文章
更多 icon
同类精品
更多 icon
继续加载