2255|2

164

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

迅为4412开发板Qt网络编程-UDP实现服务器和客户端 [复制链接]

UDP 协议是开放式,无连接,不可靠的传输层通信协议,但它收发数据的速度相对于 TCP 快很多,常用在传输音视频等数据量非常大的场合。
udp 网络编程只需要使用一个类 QUdpSocket。


本实验中对 QUdpSocket 的基本使用:
1.创建 QUdpSocket 对象。
2.绑定端口号
3.数据到来触发 readyRead()信号。
4.读取发送数据。
5.关闭。
具体步骤:
步骤一:组装 ui 界面,和 TCP 章节搭建 UI 界面方法一致。


步骤二:编写代码
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();
}

此帖出自ARM技术论坛

最新回复

qt在pc上开发都好   详情 回复 发表于 2021-5-13 22:36
点赞 关注
 

回复
举报

1411

帖子

3

TA的资源

版主

沙发
 
感谢分享,评测很详细
此帖出自ARM技术论坛
 
 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

qt在pc上开发都好

此帖出自ARM技术论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表