QT程序与python程序之间进行网络通信
一、利用Udp实现QT与python在同一主机上传输数据
代码基本参照文献1
界面设计如图:


QT中mainwindow.cpp的代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QUdpSocket>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
clientudp=new QUdpSocket(this);
clientudp->bind(40021,QUdpSocket::ShareAddress);//绑定读数据端口(监听端口),允许其他服务绑定到此端口
connect(clientudp,SIGNAL(readyRead()),this,SLOT(recv()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
// QHostAddress serverip;
// serverip.setAddress(QString("192.168.0.7"));//这是人为指定ip地址的方法
QString content=ui->textEdit_write->toPlainText()+" "
+ui->textEdit_write_2->toPlainText()+" "
+ui->textEdit_write_3->toPlainText()+" "
+ui->textEdit_write_4->toPlainText();
clientudp->writeDatagram(QVariant(content).toByteArray(),QHostAddress::LocalHost,30022 );//向30022端口写数据
}
void MainWindow::recv()
{
QByteArray array;
QHostAddress address;
quint16 port;
array.resize(clientudp->bytesAvailable());//根据可读数据来设置空间大小
//读取数据,获取客户端的IP地址和端口号
int tmp = clientudp->readDatagram(array.data(),array.size(),&address,&port);
qDebug()<<array.data();
//如果接收成功的话,将接收的数据发送给客户端
ui->label_3->setText(array.data());
}
python中socket_python.py的代码
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind(('127.0.0.1', 30022))
port = 40021
recv_date = udp_socket.recvfrom(10240) #获取数据
print('tests',recv_date[0])
udp_socket.sendto(str("received").encode(), ('127.0.0.1', port))
print('航迹点发送成功')
二、利用Udp实现QT与python在同一局域网下的不同主机之间传输数据
1.前期准备
1、关闭防火墙
2、可以先用cmd,ping一下,确定两台主机能连通。

2.修改目标IP
socket_python.py代码
import socket
earthstop_IP="192.168.31.169"
earthstop_port = 40021
own_IP="192.168.31.219"
own_port=30022
maxSize=10240 #能接收的最大数组
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 创建UDP套接字
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp_socket.bind((own_IP, own_port)) #绑定本机的Ip地址和端口号,别的主机就向这个端口传数据
#接收数据函数socketObj.recvfrom(maxSize)
recv_date = udp_socket.recvfrom(maxSize) # 获取数据
print('tests', recv_date[0])
#发送数据函数socketObj.sendto(data,(IP,另一个机子的端口号))
udp_socket.sendto(str("received").encode(), (earthstop_IP, earthstop_port))
print('航迹点发送成功')
udp_socket.close()
QT中的修改:
将writeDatagram()里面的本地地址改为,你要通信的另一个主机IP地址
void MainWindow::on_pushButton_clicked()
{
QHostAddress serverip;
serverip.setAddress(QString("192.168.31.219"));//这是另一台主机的ip地址的方法
QString content=ui->textEdit_write->toPlainText()+" "
+ui->textEdit_write_2->toPlainText()+" "
+ui->textEdit_write_3->toPlainText()+" "
+ui->textEdit_write_4->toPlainText();
//clientudp->writeDatagram(QVariant(content).toByteArray(),QHostAddress::LocalHost,30022 );//向30022端口写数据
clientudp->writeDatagram(QVariant(content).toByteArray(),serverip,30022 );//向30022端口写数据
}
能在python运行界面看到这个,表明数据传输成功了。

参考博文
计算机网络基础——系列11实现python作为服务端与qt进行udp通信.
浅谈 Qt 中 UDP 之 UdpSocket通信实例
Socket 通信之 UDP 通信

9342

被折叠的 条评论
为什么被折叠?



