QLocalSocket/QLocalServer基操

news/2024/11/23 5:06:54/

以下是使用QLocalSocket/QLocalServer进行进程间通信的具体用法:

1. 创建QLocalServer

在服务端进程中,需要创建一个QLocalServer对象,并监听客户端连接。示例代码如下:

 
#include <QLocalServer>
#include <QLocalSocket>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建QLocalServer对象
    QLocalServer server;
    server.listen("myserver");

    // 监听客户端连接
    QObject::connect(&server, &QLocalServer::newConnection, [&]() {
        QLocalSocket *socket = server.nextPendingConnection();
        if (socket) {
            qDebug() << "Client connected.";
            socket->write("Hello, world!");
            socket->flush();
            socket->waitForBytesWritten();
            socket->disconnectFromServer();
        }
    });

    return a.exec();
}
 

在上面的代码中,我们创建了一个名为"myserver"的QLocalServer对象,并监听客户端连接。当客户端连接时,我们会接收到"newConnection"信号,并在回调函数中处理客户端连接。在处理函数中,我们发送了一个"Hello, world!"的字符串给客户端,并关闭连接。

2. 连接QLocalServer

在客户端进程中,需要连接服务端的QLocalServer对象,并发送请求。示例代码如下:

 
#include <QLocalSocket>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 连接QLocalServer对象
    QLocalSocket socket;
    socket.connectToServer("myserver");

    if (socket.waitForConnected()) {
        qDebug() << "Connected to server.";
        socket.waitForReadyRead();
        QString response = QString::fromUtf8(socket.readAll());
        qDebug() << "Response: " << response;
    } else {
        qDebug() << "Failed to connect to server.";
    }

    return a.exec();
}
 

在上面的代码中,我们连接了名为"myserver"的QLocalServer对象,并等待服务端发来的数据。当服务端发送数据时,我们会接收到"readyRead"信号,并在回调函数中处理服务端响应。在处理函数中,我们输出了服务端发送的字符串。

需要注意的是,QLocalSocket/QLocalServer只能在同一台机器上使用,无法跨机器通信。如果需要跨机器通信,可以考虑使用QDBus等其他方案。


http://www.ppmy.cn/news/81783.html

相关文章

​数据库原理及应用上机(实验二 SQL数据定义功能实验)

✨作者&#xff1a;命运之光 ✨专栏&#xff1a;数据库原理及应用上机实验 目录 ✨一、实验目的和要求 ✨二、实验内容与步骤 ✨三、附加练习 ✨四、实验总结 &#x1f353;&#x1f353;前言&#xff1a; 数据库原理及应用上机实验报告的一个简单整理后期还会不断完善&am…

C++中vector的用法

博主简介&#xff1a;Hello大家好呀&#xff0c;我是陈童学&#xff0c;一个与你一样正在慢慢前行的人。 博主主页&#xff1a;陈童学哦 所属专栏&#xff1a;CSTL 前言&#xff1a;Hello各位小伙伴们好&#xff01;欢迎来到本专栏CSTL的学习&#xff0c;本专栏旨在帮助大家了解…

从开源框架到微服务架构:Spring Cloud的演进历程

从开源框架到微服务架构&#xff1a;Spring Cloud的演进历程 一、开源框架1. 开源框架的定义和背景2. 开源框架的优势与挑战3. 开源框架对软件开发的影响和发展 二、Spring框架1. Spring框架的诞生背景和发展历程2. Spring框架的特点和优势3. Spring框架在企业级应用中的应用场…

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测

多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测 目录 多维时序 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的多变量时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多…

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用

经典神经网络(4)Nin-Net及其在Fashion-MNIST数据集上的应用 1 Nin-Net的简述 1.1 Nin-Net的概述 LeNet、AlexNet和VGG都有⼀个共同的设计模式&#xff1a;通过⼀系列的卷积层与汇聚层来提取空间结构特征&#xff1b;然后通过全连接层对特征的表征进⾏处理。AlexNet和VGG对Le…

【08】Nginx之负载均衡

负载均衡的作用 1、解决服务器的高并发压力&#xff0c;提高应用程序的处理性能。 2、提供故障转移&#xff0c;实现高可用。 3、通过添加或减少服务器数量&#xff0c;增强网站的可扩展性。 4、在负载均衡器上进行过滤&#xff0c;可以提高系统的安全性。 实现方式 方式…

微服务架构初探

大家好&#xff0c;我是易安&#xff01;我们今天来谈一谈微服务架构的前世今生。 我们先来看看维基百科是如何定义微服务的。微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出&#xff0c;他们定义了微服务是由单一应用程序构成的小服务&#xff0c;拥有自己的…

effective c++ 52 写了placement new也要写placement delete

effective c 52 写了placement new也要写placement delete 分析 "placement new"通常是专指指定了位置的new(std::size_t size, void *mem)&#xff0c;用于vector申请capacity剩余的可用内存。 但广义的"placement new"指的是拥有额外参数的operator ne…