QLocalServer/QLocalSocket 进程间通信事例
时间: 2023-06-29 08:13:14 浏览: 93
好的,以下是一个使用QLocalServer和QLocalSocket实现进程间通信的简单示例:
假设我们有两个进程,一个是服务器进程,一个是客户端进程。我们需要在它们之间建立通信。
服务器进程代码:
```c++
#include <QtNetwork/QLocalServer>
#include <QtNetwork/QLocalSocket>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QLocalServer server;
if (!server.listen("my_local_server")) {
qWarning() << "Unable to start the server: " << server.errorString();
return 1;
}
qDebug() << "Server started, waiting for clients to connect...";
QObject::connect(&server, &QLocalServer::newConnection, [&](){
QLocalSocket* socket = server.nextPendingConnection();
if (socket) {
qDebug() << "New client connected";
socket->write("Hello from server!");
socket->flush();
socket->waitForBytesWritten();
socket->close();
socket->deleteLater();
}
});
return a.exec();
}
```
客户端进程代码:
```c++
#include <QtNetwork/QLocalSocket>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QLocalSocket socket;
socket.connectToServer("my_local_server");
if (!socket.waitForConnected()) {
qWarning() << "Unable to connect to the server: " << socket.errorString();
return 1;
}
qDebug() << "Connected to server, waiting for data...";
if (socket.waitForReadyRead()) {
qDebug() << socket.readAll();
}
socket.disconnectFromServer();
return a.exec();
}
```
在服务器进程中,我们首先创建一个QLocalServer对象,然后调用其listen()方法来监听本地套接字。如果listen()返回false,则表示启动服务器失败。在服务器对象上注册newConnection信号的处理函数,当有客户端连接时,该函数会被调用。在函数内部,我们可以调用server.nextPendingConnection()获取新连接的QLocalSocket对象,然后向客户端发送一条消息,并关闭连接。
在客户端进程中,我们创建一个QLocalSocket对象,然后调用其connectToServer()方法来连接到服务器进程。如果连接失败,我们会输出错误消息。如果连接成功,我们会等待从服务器端发送的数据,并输出到控制台上。
以上就是一个简单的使用QLocalServer和QLocalSocket实现进程间通信的例子。