【计算机网络基础——系列11】实现python作为服务端与qt进行udp通信
系列文章总结【计算机网络基础——系列1】-matlab与python使用socket udp进行进程间通信【计算机网络基础——系列2】-matlab与python使用socket tcp进行进程间通信【计算机网络基础——系列3】输入url后页面会遇到的问题【计算机网络基础——系列4】关于HTTP请求的相关内容【计算机网络基础——系列5】前端遇到的三种网络攻击【计算机网络基础——系列6】浏览器缓存之
系列文章总结
【计算机网络基础——系列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 | 服务端绑定的端口号30022 | port = 40021 | udp_socket.recvfrom | udp_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】
分为两步解决:
- 将这段话修改一下:
#include 改为#include
- 在.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服务端:
**码字不易~, 各位看官要是看爽了,可不可以三连走一波,点赞皆有好运!,不点赞也有哈哈哈~~~**
更多推荐
所有评论(0)