专栏中心

EEPW首页 > 专栏 > 迅为4412开发板Qt网络编程-UDP实现服务器和客户端

迅为4412开发板Qt网络编程-UDP实现服务器和客户端

发布人:魔法城堡 时间:2021-05-13 来源:工程师 发布文章

UDP 协议是开放式,无连接,不可靠的传输层通信协议,但它收发数据的速度相对于 TCP 快很多,常用在传输音视频等数据量非常大的场合。

udp 网络编程只需要使用一个类 QUdpSocket。

1.jpg

本实验中对 QUdpSocket 的基本使用:

1.创建 QUdpSocket 对象。

2.绑定端口号

3.数据到来触发 readyRead()信号。

4.读取发送数据。

5.关闭。

具体步骤:

步骤一:组装 ui 界面,和 TCP 章节搭建 UI 界面方法一致。

2.jpg

步骤二:编写代码

1.创建 QUdpSocket 对象,使用 bind 函数绑定端口号和套接字,数据报到来后会发出信 号

(),在绑定的槽函数内去读取数据。

2.读取数据,数据到来 hasPendingDatagrams()返回 true,再用 pendingDatagramSize()获取数据报的长度,如果数据没有被读取

完,hasPendingDatagrams()就会返回 true,直至数据都被读取完。

readDatagram(data,size);

参数 data 为读取的数据,size 为数据长度。

3.发送数据,使用 writeDatagram 函数,

writeDatagram(const char *data, qint64 len, const QHostAddress &host, quint16 port);

Data:发送的数据。

Len:发送的数据长度。

Host:目标 IP 地址。

Port:目标端口号。

4.关闭 socket 套接字。

代码如下:


udp.h

#include <QMainWindow>

#include <QUdpSocket>

namespace Ui {

class Udp;

}

class Udp : public QMainWindow

{

Q_OBJECT

public:

explicit Udp(QWidget *parent = 0); ~Udp();

QUdpSocket * udpSocket;

private slots:

void on_pushButton_clicked();

void readyRead_Slot(void);

void on_pushButton_3_clicked();

void on_pushButton_2_clicked();

private:

Ui::Udp *ui;

};

udp.cpp:

Udp::Udp(QWidget *parent) :

QMainWindow(parent), ui(new Ui::Udp)

{

ui->setupUi(this);

udpSocket = new QUdpSocket(this);

}

Udp::~Udp()

{

delete ui;

}

/*

* 打开按钮

*/

void Udp::on_pushButton_clicked()

{

//绑定本端口的端口号

if(udpSocket->bind(ui->cliEdit->text().toUInt()) == true){

QMessageBox::information(this,"提示","成功");

}else{

QMessageBox::information(this,"提示","失败");

}

//绑定数据信号和槽函数

connect(udpSocket,SIGNAL(readyRead()),this,SLOT(readyRead_Slot()));

}

/*

*读取数据槽函数

*/

void Udp::readyRead_Slot()

{

QString buf;

QByteArray array;

//hasPendingDatagrams()返回 true 时表示至少有一个数据报在等待被读取

while(udpSocket->hasPendingDatagrams()){

//获取数据

array.resize(udpSocket->pendingDatagramSize());

udpSocket->readDatagram(array.data(),array.size());

buf = array.data();

ui->recvEdit->appendPlainText(buf);

}

}

/*

* 发送数据

*/

void Udp::on_pushButton_3_clicked()

{

quint16 port;

QString sendBuff;

QHostAddress address;

address.setAddress(ui->ipEdit->text());//目标机地址

port = ui->portEdit->text().toInt();//目标机端口号

sendBuff = ui->sendEdit->text();//发送的数据

//发送

udpSocket->writeDatagram(sendBuff.toLocal8Bit().data(),sendBuff.length(),address,port);

}

/*

*关闭

*/

void Udp::on_pushButton_2_clicked()

{

udpSocket->close();

}

3.jpg

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词: 开发板

相关推荐

当6 TOPS不再是极限:米尔RK3576 + Hailo-8,让高帧率摄像头真正“实时”

12路1080P高清视频流,米尔RK3576开发板重塑视频处理极限

51单片机开发板

拆解:树莓派5 8 GB AI 套件

Microchip PIC24FJ256DA210开发板在图形显示上的应用

在米尔FPGA上实现Tiny YOLO V4,助力AIoT应用

SL811HS开发板原理图.rar

ARM嵌入式系统开发板三星S3C44B0X的完整Protel电路图.rar

米尔-瑞萨RZ/G2L核心板开发板的系统启动时间优化应用笔记

国产FPGA SoC芯选择,米尔安路飞龙核心板重磅发布

莱迪思联手英伟达推出 Sensor Bridge 方案 加速边缘 AI 产品落地

利用PIC24F Curiosity开发板简化设计

视频 2018-01-18

Jobs芯科EFR32xG24 Dev Kit开发板开箱视频

视频 2022-08-24

6TOPS算力驱动30亿参数LLM,米尔RK3576部署端侧多模态多轮对话

Badge USB OCD 与 78F0513D 使用演示视频

视频 2009-05-20

CY7C68013开发板原理图.rar

米尔出席openEuler Summit 2024,携全志T536和RK3562核心模组亮相

AN2131开发板原理图.rar

米尔出席2025安路科技FPGA技术沙龙

NEC MCU 78F0513D开发板使用教程

视频 2009-04-07
更多 培训课堂
更多 焦点
更多 视频

技术专区