QT利用Udp与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 通信

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值