Qt之进程间通信(本地套接字)

发布时间 2023-05-25 17:58:53作者: TechNomad

一、QLocalServer

QLocalServer是Qt框架中的一个类,用于创建本地套接字服务器。它可以用于在同一台计算机上的进程之间进行通信,而无需通过网络。

下面是使用QLocalServer的源码:

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    //创建QLocalServer对象
    m_local_server = new QLocalServer(this);
    //连接QLocalServer的newConnection()信号到一个槽函数,以处理新连接
    connect(m_local_server, &QLocalServer::newConnection, this, &MainWindow::on_new_connected);
    //设置服务器名字
    m_local_server->listen("monitor_server");
}

//在槽函数中,接受新的连接并处理数据
void MainWindow::on_new_connected()
{
    QLocalSocket *local_client = m_local_server->nextPendingConnection();
    connect(local_client, &QLocalSocket::readyRead, this, &MainWindow::on_socket_readyRead);
}

void MainWindow::on_socket_readyRead()
{
    QLocalSocket *clientSocket = nullptr;
    clientSocket = qobject_cast<QLocalSocket*>(sender());
    if (clientSocket) {
        // 处理接收到的数据
        QByteArray data = clientSocket->readAll();
        qDebug() << data;
    }
}

二、QLocalSocket

QLocalSocket是Qt框架中的一个类,用于与QLocalServer建立本地套接字连接,并进行通信。

下面是使用QLocalSocket的源码:

MainWindow::MainWindow(QWidget *parent)
    : QWidget(parent)
{
    //创建QLocalSocket对象
    m_local_client = new QLocalSocket(this);
    connect(m_local_client, &QLocalSocket::connected, this, &MainWindow::on_socket_connected);
    connect(m_local_client, &QLocalSocket::disconnected, this, &MainWindow::on_socket_disconnected);
    //连接到QLocalServer(monitor_server是server的名称)
    m_local_client->connectToServer("monitor_server");
}

void MainWindow::on_socket_connected()
{
    qDebug() << "local server socket connected";
    // 连接成功,可以发送数据
    m_local_client->write(QString("Hello Server").toLatin1());
    m_local_client->flush();
}

void MainWindow::on_socket_disconnected()
{
    qDebug() << "local server socket disconnected";
}