Qt与python进程之间的TCP通信

        进程间通信(IPC-Interprocess communication)是一组编程接口,能够让程序员协调不同的进程,使之能在一个操作系统里同时运行。这使得多个程序能够在同一时间里互相协作,共同完成用户的某项任务。

        我们知道Qt可以通过QLocalSocket和QLocalServer来创建本地的TCP/IP,和其它进程进行通信。详细资料请查看博客:https://blog.csdn.net/liang19890820/article/details/50633819

#include "message.h"
#include <QDebug>

Message::Message(QObject *parent) : QObject(parent)
{
    m_socket = new QLocalSocket(this);
    m_server = new QLocalServer(this);
    m_server->listen("yike_ui");
    m_server->setMaxPendingConnections(1);  //设置最大允许连接数
    connect(m_server, SIGNAL(newConnection()), this, SLOT(newConnectSlot()));
}

void Message::newConnectSlot()
{
    c_socket = m_server->nextPendingConnection();
    connect(c_socket, SIGNAL(readyRead()), this, SLOT(getMessage()));
}

void Message::getMessage()    //作为服务器获取
{
    QByteArray msg = c_socket->readAll();
    qDebug() << msg;
}

void Message::postMessage(QString target, QByteArray msg)    //作为客户端发送
{
    m_socket->connectToServer(target);
    if(m_socket->waitForConnected(10))
    {
        m_socket->write(msg);
        if(m_socket->waitForBytesWritten(10))
        {
            m_socket->disconnectFromServer();
        }
        else
        {
            qDebug("post message error");
        }
    }
    else
    {
        qDebug("local server connect error");
    }
}


    python也可以做本地的TCP/IP通信,详细资料请查看博客:https://blog.csdn.net/tenderzhe/article/details/79031087

import socket
import os


socket_server = "/tmp/yike_socket"
server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
if os.path.exists(socket_server):
    os.unlink(socket_server)
server.bind(socket_server)
server.listen(1)
print('1')
while True:
    connection, address = server.accept()
    data = connection.recv(1024)
    print(data)
connection.close()


        这里有个问题是Qt其实是没有明确指定socket文件的位置的,listen()函数只是指定了监听地址的名字,这点曾让我很懵逼,实际测试发现其实我监听的yike_ui是生成在系统的/tmp目录下的,所以python中也得指定监听的socket文件地址在/tmp目录下。



猜你喜欢

转载自blog.csdn.net/a18373279153/article/details/80608883