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是生成在linux系统的/tmp目录下的,所以python中也得指定监听的socket文件地址在/tmp目录下。

 

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python中,可以使用PyQt5库来实现qt5 tcp通信。以下是一个简单的示例代码: ```python import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtNetwork import * class MyTcpServer(QObject): def __init__(self, parent=None): super().__init__(parent) self.tcpServer = QTcpServer(self) self.tcpServer.newConnection.connect(self.handleConnection) self.tcpServer.listen(QHostAddress.Any, 8888) def handleConnection(self): client = self.tcpServer.nextPendingConnection() client.readyRead.connect(self.receiveData) def receiveData(self): client = self.sender() data = client.readAll() print("Received:", data.decode()) class MyTcpClient(QObject): def __init__(self, parent=None): super().__init__(parent) self.tcpSocket = QTcpSocket(self) self.tcpSocket.connected.connect(self.connected) self.tcpSocket.readyRead.connect(self.receiveData) self.tcpSocket.connectToHost("localhost", 8888) def connected(self): print("Connected") def receiveData(self): data = self.tcpSocket.readAll() print("Received:", data.decode()) def sendData(self, data): self.tcpSocket.write(data) self.tcpSocket.flush() if __name__ == "__main__": app = QApplication(sys.argv) server = MyTcpServer() client = MyTcpClient() client.sendData("Hello, server".encode()) sys.exit(app.exec_()) ``` 这个示例代码实现了一个简单的TCP服务器和客户端。服务器监听端口8888,并在收到客户端连接后,接收客户端发送的数据。客户端连接到localhost:8888,并发送一条消息给服务器。 在这个示例代码中,我们使用了QTcpServerQTcpSocket类来实现TCP通信QTcpServer用于监听端口并接收连接,QTcpSocket用于连接到服务器并发送/接收数据。 ### 回答2: Python Qt5是一种常用的界面开发工具,可以用来创建GUI应用程序。而TCP通信则是一种常见的网络通信协议,用于在不同设备之间传输数据。 Python Qt5提供了QTcpSocket类,可以通过创建一个套接字对象来建立TCP连接,并进行通信。首先,需要导入PyQt5库,并创建一个QTcpSocket对象。 然后,可以使用QTcpSocket对象的connectToHost方法来连接到指定的IP地址和端口号。成功连接后,可以使用write方法发送数据,使用readAll方法获取对方发送的数据。 对方的接收程序也需要使用TCP通信方式,创建一个QTcpServer对象,并监听指定的端口号。成功建立连接后,通过QTcpServer对象的nextPendingConnection方法获取到已连接的SOCKET对象,并使用readAll方法获取对方发送的数据。 在完成通信后,可以使用QTcpSocket对象的disconnectFromHost方法断开连接,同时也需要关闭QTcpServer对象。 总之,通过Python Qt5可以轻松实现TCP通信,无论是创建界面还是进行网络通讯都非常方便。这种方法可以应用于各种场景,如客户端服务器模式的数据传输、远程控制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值