以下是使用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等其他方案。