qt中编写udp实践

本文记录了在Qt环境中实现UDP发送和接收的过程。首先介绍了UDP协议的基础知识,然后描述了在Qt项目中遇到的错误,如添加`QT += network`到.pro文件以解决头文件找不到的问题。接着,展示了如何编写UDP发送程序,通过按键触发发送操作。对于接收程序,通过bind()函数绑定端口,并利用`waitForReadyRead`函数实现等待数据并读取的功能。在解决接收问题的过程中,最初尝试使用while循环,最终采用多线程和`waitForReadyRead`配合解决了程序卡顿的问题,成功实现了UDP数据的完整传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天初学udp传输协议,先了解了一下DUP的内容,UDP是一个用户数据报协议,是一个传输层的协议。其传输速度快。但是传输的质量有时不好。

今天我学习了一下udp需要用qt来进行的操作,下面介绍一下我遇到的问题和解决方法

首先我建立了一个qt的项目,发现出现问题,


widget不是类或命名空间,经过排查发现是是因为这个widget应该是自己创建的窗口的名字而不是同意的widget

但是在添加头文件是遇到问题,C1083无法打开包括文件,看了好长时间才发现是因为咱们用UDP所需的头文件

QAbstractSocket没有在pro中添加QT   +=network添加之后发现头文件可以找到了。

现在我们开始编写一个简单的收发的小程序

先编写发送的,发送udp的文件比较简单,主要代码是



我自定义了一个按键,这个按键可以进行发送这个操作,一下发送100条helloworld,先用socket实例化一个对象,sender,让它可以发送文件,函数需要这样几个参数,第一个是信息的内容,第二个是我们发送的地址,第三个是我们发送的端口。这样我们就可以把我们想发送的数据发送到我们想要的地方了。

发送程序比较简单,下面我们来编写一下我们的接收程序。

编写接收程序的时候遇到了不少的问题,我们来一一解决

首先我们编写一个接收程序想要完成的是从刚才我们发送的端口把我们发送的数据取出来,然后进行读取。

那么我们就需要一个函数,查资料得知这个函数是bind(),我们使用了一下这个函数,

uSocket.bind(QHostAddress("127.0.0.1"), PORT);

函数中需要的是地址和我们的端口,这样就能把我们需要的数据读取在我们定义的socket上了。

可是我们怎么判断可以读取呢?

一开始我想用一个叫做hsaPendingDatagrams的函数

while(uSocket->hasPendingDatagrams())

这个函数可以判断在这个端口处有没有阻塞的数据,如果有的话就拿出来读。

下面一个问题就是取出来的数据怎么存储了,想了想还是用了

QByteArray ba;

QByteArrary存储。

可是用发送程序发送之后并不能成功的接收到。那么是什么问题呢?

这时候我想了想,就决定编写了一个控制台程序,来验证是哪里出现了问题。

控制台接收程序如下:

头文件

#ifndef UDPRECEIVER_H
#define UDPRECEIVER_H
 
 
#include <QObject>
#include <QUdpSocket>
 
class UdpReceiver : public QObject
{
  
  
    Q_OBJECT
 
public:
    UdpReceiver(QObject *p = 0);
    ~UdpReceiver
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值