当前位置: 首页 > news >正文

跨进程通信之QLocalSocket

跨进程通信之QLocalSocket


苏轼 - 《临江仙·送钱穆父

一别都门三改火,天涯踏尽红尘。
依然一笑作春温。
无波真古井,有节是秋筠。

惆怅孤帆连夜发,送行淡月微云。
尊前不用翠眉颦。
人生如逆旅,我亦是行人。

QLocalSocketQLocalServer。这是在 同一台机器上进行进程间通信(IPC) 的Qt解决方案。

graph TDA[本地进程间通信 IPC] --> B[QLocalServer]A --> C[QLocalSocket]B --> D[服务器端<br>监听连接]C --> E[客户端<br>发起连接]D --> F[基于系统本地套接字<br>Windows: 命名管道<br>Unix: Unix Domain Socket]E --> FF --> G[高性能<br>无需网络协议栈<br>数据不经过网卡]

是什么?

  • QLocalServer:类似于 QTcpServer,但用于本地连接。它监听一个"服务器名称",等待客户端连接。
  • QLocalSocket:类似于 QTcpSocket,但用于本地连接。客户端用它连接到 QLocalServer

工作原理

它们基于操作系统的本地进程通信机制:

  • Windows:命名管道(Named Pipes)
  • Unix/Linux/macOS:Unix 域套接字(Unix Domain Sockets)

优势:比网络通信更快、更安全(不经过网络接口卡)。

使用案例(Qt官方案例 localfortuneclient/localfortuneserver)

QLocalSocket端核心代码

本地服务器端发送的报文格式:

    QDataStream out(&block, QIODevice::WriteOnly);out << quint32(message.size());out << message;
Client::Client()
{QLocalSocket* localSocket = new QLocalSocket(this);// 连接本地服务器connect(pshBtnConnectServer, &QPushButton::clicked, [&](){localSocket->abort();localSocket->connectToServer(hostLineEdit->text());// 后续逻辑,每个指定间隔,重新连接服务器.});// 从服务器读取类容(简化版接收代码)connect(pshBtnReadFromServer, &QPushButton::readyRead, [&](){QDataStream in;in >> blockSize >> nextFortune;});// 显示网络问题connect(pshBtnNetError, QOverload<QLocalSocket::LocalSocketError>::of(&QLocalSocket::error), [&](QLocalSocket::LocalSocketError socketError){switch (socketError) {case QLocalSocket::ServerNotFoundError:break;case QLocalSocket::ConnectionRefusedError:break;case QLocalSocket::PeerClosedError:break;default:}});
}

QLocalServer端核心代码

Client::Client()
{QLocalServer* server = new QLocalServer(this);if (!server->listen("fortune")) {return;}// 获取到来自客户端的一个新连接, 此段代码逻辑为: 客户端每个1s重新连接服务器,服务器每次接收到新连接后,向Peer对象发送数据,同时断开连接。迎接客户端的下一次连接。connect(server, &QLocalServer::newConnection, [&](){QByteArray block;QDataStream out(&block, QIODevice::WriteOnly);out.setVersion(QDataStream::Qt_5_10);const int fortuneIndex = QRandomGenerator::global()->bounded(0, fortunes.size());const QString &message = fortunes.at(fortuneIndex);out << quint32(message.size());out << message;QLocalSocket *clientConnection = server->nextPendingConnection();connect(clientConnection, &QLocalSocket::disconnected,clientConnection, &QLocalSocket::deleteLater);clientConnection->write(block);clientConnection->flush();clientConnection->disconnectFromServer();});}

应用场景

  1. 主程序与插件通信: 主程序作为服务器,插件作为客户端;
  2. 多进程协作 : 多个进程通过本地socket协调工作;
  3. 守护进程与服务 : 系统服务与GUI应用程序通信;
  4. 进程间数据共享 : 传输配置、状态信息等;
http://www.jsqmd.com/news/55472/

相关文章:

  • 2025最新云南短视频制作公司及运营服务商推荐!技术实力与效果双优企业榜单发布
  • 电脑程序加密技术全面解析
  • pm1300 的gpio 使用介绍
  • 三合一机器人训练工具让普通人也能教学
  • 计算机组成原理 - 计算机系统概述
  • 当然,请记住珍惜当下。—— NOIP2025 游记 退役
  • 3.分析与USGS的ChapterM_Minerals波普库的比对结果
  • iapp lib.so密码流程分享
  • 2025年如何选择修补防水涂料销售厂家?
  • 深入解析:Adobe Camera Raw 2026 全面解析:AI污点清除、雪景蒙版与变量调整深度评测
  • Nature Genetics | 本周最新文献速递
  • 2025 NOIP 游记
  • 万物皆表达式:Rust 安全性与表达力的基石 - 指南
  • 10417_基于SSM的天水文化古迹宣传网
  • 2025年GEO公司推荐:全面剖析五大企业的核心技术优势
  • AtCoder Beginner Contest 434 ABCDE 题目解析
  • 高精度三维扫描仪十大品牌综合实力榜:2025年权威选购指南
  • 2025 年台湾摄影培训人像摄影培训推荐榜:路人贾摄影讲堂(台湾分公司)连续蝉联榜首,深度实战铸就职业摄影师
  • 哪家 geo 公司值得推荐?2025 年 12 月实测优质清单
  • 深圳GEO优化公司2025精选推荐
  • 有哪些 GEO 优化公司推荐?2025 年12月省心清单
  • GEO 优化公司哪家值得推荐?2025 年 12 月实战验证
  • 深圳GEO优化公司2025值得选的几家
  • 深圳GEO优化服务商2025口碑名单速览
  • 2025深圳geo公司靠谱选择指南
  • 基于深度学习的安全帽检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 深圳geo优化公司避坑+优选清单
  • 2025 年12月 GEO 公司推荐:千企验证实战清单
  • “我的理想”主题班会演讲
  • code-philosophy-chapter1-2