【计算机网络基础——系列11】实现python作为服务端与qt进行udp通信

8 篇文章 0 订阅
2 篇文章 0 订阅

系列文章总结

【计算机网络基础——系列1】-matlab与python使用socket udp进行进程间通信
【计算机网络基础——系列2】-matlab与python使用socket tcp进行进程间通信
【计算机网络基础——系列3】输入url后页面会遇到的问题
【计算机网络基础——系列4】关于HTTP请求的相关内容
【计算机网络基础——系列5】前端遇到的三种网络攻击
【计算机网络基础——系列6】浏览器缓存之cookie、session、localstorage
【计算机网络基础——系列7】浏览器缓存之—http缓存
【计算机网络基础——系列8】前端优化总结
【计算机网络基础——系列9】restful规范;dns劫持
【计算机网络基础——系列10】osi网络结构;tcp协议保持传输的可靠性;SSL
【计算机网络基础——系列11】实现python作为服务端与qt进行udp通信


一、python作为服务端

参数解释:

udp_socket.bind服务端绑定的端口号30022port = 40021udp_socket.recvfromudp_socket.sendto
进行套接字绑定为服务端这边的端口号,客户端需要发送数据的的话,就往这个端口发送客户端那边的端口号,服务端发送数据即往这个端口发送接收到的数据发送数据给客户端
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(44).encode(), ('127.0.0.1', port))
print('发送成功')

二、qt作为客户端

首选遇到了两个报错:

2.1 错误一【error: ‘setCodecForTr’ is not a member of ‘QTextCodec’】

这是因为qit版本的问题,只需要将下面这段话注释即可:

//QTextCodec::setCodecForTr(QTextCodec::codecForName(“UTF-8”));


2.2 错误二【QMainWindow: No such file or directory】

分为两步解决:

  1. 将这段话修改一下

#include 改为#include

  1. 在.pro文件中加上一段话:

QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgets


2.3 错误三 qt无法接收到服务端传过来的数据

随后在进行udp连接时又遇到了一个小问题,就是qt作为客户端可以发送消息给服务端,但是无法接收服务端传过来的数据。后来我发现是我将发送端口和接收端口设置为一样了,在进行修改后就可以通信了。

在这里插入图片描述

在这里插入图片描述

当时我这两个端口设置为一样的了,后来进行了更改,设置为不同值后就可以进行数据传递了。


2.4 qt作为客户端实现代码

2.4.1 进行udp客户端端口绑定

UdpClient::UdpClient(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::UdpClient)
{
    ui->setupUi(this);
//    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
    clientudp=new QUdpSocket(this);
    clientudp->bind(40021,QUdpSocket::ShareAddress);//绑定读数据端口(监听端口),允许其他服务绑定到此端口
    connect(clientudp,SIGNAL(readyRead()),this,SLOT(recv()));
}

2.4.2 进行udp客户端数据发送

void UdpClient::on_pushButton_clicked()
{
//    QHostAddress serverip;
//    serverip.setAddress(QString("192.168.0.7"));//这是人为指定ip地址的方法
    clientudp->writeDatagram(QVariant(ui->textEdit_write->toPlainText()).toByteArray(),QHostAddress::LocalHost,30022 );//向30022端口写数据

}

2.4.3 进行udp客户端数据接收

void UdpClient::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());
}


2.5 qt作为客户端实现最终效果

2.5.1 qt客户端:

在这里插入图片描述

2.5.2 python服务端:

在这里插入图片描述


**码字不易~, 各位看官要是看爽了,可不可以三连走一波,点赞皆有好运!,不点赞也有哈哈哈~~~**
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让子弹飞一会儿=>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值