系列文章总结

【计算机网络基础——系列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服务端:

在这里插入图片描述


**码字不易~, 各位看官要是看爽了,可不可以三连走一波,点赞皆有好运!,不点赞也有哈哈哈~~~**
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐