qt c++ 实现服务注册、发布服务,最后被成功后回调

在Qt中实现服务注册、发布服务,并在服务成功发布后执行回调,可以通过使用Qt的QLocalServerQLocalSocket来实现本地服务通信,或者使用网络服务如QTcpServerQTcpSocket进行网络服务的发布与发现。这里我们以本地服务为例来说明。

实现本地服务注册与发布

本地服务(也称为命名管道或Unix域套接字)允许同一台计算机上的进程间通信。以下是一个简化的例子,展示如何创建一个本地服务并发布,当服务成功启动时执行回调函数。


Cpp

深色版本

1#include <QCoreApplication>
2#include <QLocalServer>
3#include <QLocalSocket>
4#include <QTimer>
5
6class LocalService : public QObject {
7    Q_OBJECT
8public:
9    LocalService(QObject *parent = nullptr) : QObject(parent) {
10        server = new QLocalServer(this);
11        connect(server, &QLocalServer::newConnection, this, &LocalService::onNewConnection);
12        connect(server, &QLocalServer::serverErrorOccurred, this, &LocalService::onServerError);
13    }
14
15    bool start(const QString &serviceName) {
16        if (!server->listen(serviceName)) {
17            if (server->serverError() == QAbstractSocket::AddressInUseError) {
18                // 如果服务名已被占用,尝试删除旧的服务
19                QLocalServer::removeServer(serviceName);
20                if (!server->listen(serviceName)) {
21                    qCritical() << "Cannot start service:" << server->errorString();
22                    return false;
23                }
24            } else {
25                qCritical() << "Unknown error starting service:" << server->errorString();
26                return false;
27            }
28        }
29        // 成功启动服务后,触发回调
30        emit serviceStarted();
31        return true;
32    }
33
34signals:
35    void serviceStarted();
36
37private slots:
38    void onNewConnection() {
39        QLocalSocket *clientConnection = server->nextPendingConnection();
40        // 这里可以处理新的连接,例如读写数据
41    }
42
43    void onServerError(QLocalServer::SocketError error) {
44        qCritical() << "Server error occurred:" << error;
45    }
46
47private:
48    QLocalServer *server;
49};
50
51// 回调函数示例
52void onServiceStarted() {
53    qDebug() << "Service started successfully!";
54}
55
56int main(int argc, char *argv[]) {
57    QCoreApplication a(argc, argv);
58
59    LocalService service;
60    if (service.start("MyUniqueService")) {
61        // 连接到服务启动成功的信号
62        QObject::connect(&service, &LocalService::serviceStarted, &onServiceStarted);
63    } else {
64        return -1;
65    }
66
67    return a.exec();
68}

在这个例子中,我们定义了一个LocalService类,用于创建和管理本地服务。当调用start方法尝试启动服务时,如果服务名已被占用,会尝试先移除旧的服务再重新启动。服务成功启动后,会发出serviceStarted信号,我们可以在主程序中连接这个信号到自定义的回调函数onServiceStarted,以执行服务启动后的逻辑。

请注意,这只是一个基本示例,实际应用中可能需要更复杂的逻辑处理,比如数据的读写、错误处理、安全验证等。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

季截

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值