[QT]QT教程之实例分析[九] 网络广播程序(QUdpSocket)

本文深入解析了UDP协议在广播程序中的应用,通过实例代码详细说明了服务器端与客户端的实现方式。从头文件引入、类定义到具体实现,包括QUdpSocket的使用、数据发送与接收过程,提供了全面的指南。

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

重点知识已近在代码里注释...
请仔细看代码
本文原创
转载请保留此链接 http://blog.youkuaiyun.com/siren0203

本章内容 以一个完整的 广播程序为实例 再次详细说明 UDP协议的使用方法..

发送端...

头文件

udpSocket.h

#ifndef UPDSOCKET_H #define UPDSOCKET_H #include <QDialog> class QUdpSocket; class QTextEdit; class QVBoxLayout; class Server:public QDialog{ Q_OBJECT public: Server(QWidget *parent=0); QPushButton *send; QUdpSocket *udpSocket; QTextEdit *textEdit; QVBoxLayout *layout; int port; private slots: void submit(); }; #endif // UPDSOCKET_H

实现代码

main.cpp

#include <QApplication> #include <QUdpSocket> #include <QTextEdit> #include <QVBoxLayout> #include <QPushButton> #include <QMessageBox> #include <QTextCodec> #include "updSocket.h" Server::Server(QWidget *parent):QDialog(parent){ port=4444; //创建 QUdpSocket 对象 udpSocket=new QUdpSocket(this); textEdit=new QTextEdit(); send=new QPushButton(tr("发送")); layout=new QVBoxLayout; layout->addWidget(textEdit); layout->addWidget(send); setLayout(layout); //关联 发送 信号到槽 connect(send,SIGNAL(clicked()),this,SLOT(submit())); setWindowTitle(tr("服务器端")); } void Server::submit(){ QMessageBox box; QString text=textEdit->toPlainText(); if(text.length()==0){ box.setText(tr("请输入发送内容")); } /*开始发送数据*/ //初始化长度 int len=0; //udpSocket->writeDatagram(发送的数据,发送数据的长度,IP,端口); 返回一个长度. len=udpSocket->writeDatagram(text.toLatin1(),text.length(),QHostAddress::LocalHost,port); if(len){ box.setText(tr("发送成功")); } box.exec(); } int main(int argc,char ** argv){ QApplication app(argc,argv); QTextCodec ::setCodecForTr(QTextCodec::codecForName("gb2312")); Server server; server.show(); return app.exec(); }

---------------下面是接收端也就是客户端----------------------------------

头文件

Client.h

#ifndef SERVER_H #define SERVER_H #include <QDialog> class QUdpSocket; class QPushButton; class QVBoxLayout; class QTextEdit; class Client :public QDialog{ Q_OBJECT public: Client(QWidget *parent=0); QPushButton *close; QUdpSocket *udpSocket; QVBoxLayout *layout; QTextEdit *textEdit; int port; private slots: void clientMessage(); }; #endif // SERVER_H

实现代码

main.cpp

#include <QApplication> #include <QPushButton> #include <QVBoxLayout> #include <QUdpSocket> #include <QTextEdit> #include <QTextCodec> #include <QMessageBox> #include "Client.h" Client::Client(QWidget *parent):QDialog(parent){ port=4444; close=new QPushButton(this); textEdit=new QTextEdit(this); close->setText(tr("关闭")); layout=new QVBoxLayout(this); layout->addWidget(close); layout->addWidget(textEdit); setLayout(layout); setWindowTitle(tr("接收端")); //实例化QUdpSocket 对象... udpSocket=new QUdpSocket(this); //监听端口 bool conn=udpSocket->bind(port); //链接失败 if(!conn){ QMessageBox box; box.setText(tr("链接错误")); box.exec(); }else{ //把udpSocket的信号关联到槽 connect(udpSocket,SIGNAL(readyRead()),this,SLOT(clientMessage())); } } void Client::clientMessage(){ while(udpSocket->hasPendingDatagrams()){ //是否读到数据 QByteArray data; //udpSocket->pendingDatagramSize 获取报文长度 //data.resize 给 data 数组设置长度 data.resize(udpSocket->pendingDatagramSize()); //读入数据 udpSocket->readDatagram(data.data(),data.size()); //显示数据内容 QString str=data.data(); textEdit->insertPlainText(str+"/r/n"); } } int main(int argc,char ** argv){ QApplication app(argc,argv); QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312")); Client client; client.show(); return app.exec(); }

-------------------------下面是 演示图片-------------------

为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列教程一直写下去,它将涉及Qt的方方面面 一、Qt Creator的安装和hello world程序的编写 二、Qt Creator编写多窗口程序 三、Qt Creator登录对话框 四、Qt Creator添加菜单图标 五、Qt Creator布局管理器的使用 六、Qt Creator实现文本编辑 七、Qt Creator实现文本查找 八、Qt Creator实现状态栏显示 Qt Creator中鼠标键盘事件的处理实现自定义鼠标指针 十、Qt Creator中实现定时器和产生随机数 十一、Qt 2D绘图(一)绘制简单图形 十二、Qt 2D绘图(二)渐变填充 十三、Qt 2D绘图(三)绘制文字 十四、Qt 2D绘图(四)绘制路径 十五、Qt 2D绘图(五)显示图片 十六、Qt 2D绘图(六)坐标系统 十七、Qt 2D绘图(七)Qt坐标系统深入 十八、Qt 2D绘图(八)涂鸦板 十Qt 2D绘图()双缓冲绘图简介 二十、Qt 2D绘图(十)图形视图框架简介 二十一、Qt数据库(一)简介 二十二、Qt数据库(二)添加MySQL数据库驱动插件 二十三、Qt数据库(三)利用QSqlQuery类执行SQL语句(一) 二十四、Qt数据库(四)利用QSqlQuery类执行SQL语句(二) 二十五、Qt数据库(五)QSqlQueryModel 二十六、Qt数据库(六)QSqlTableModel 二十七、Qt数据库(七)QSqlRelationalTableModel 二十八、Qt数据库(八)XML(一) 二十Qt数据库()XML(二) 三十、Qt数据库(十)XML(三) 三十一、Qt 4.7.0及Qt Creator 2.0 beta版安装全程图解 三十二、第一个Qt Quick程序(QML程序) 三十三、体验QML演示程序 三十四、Qt Quick Designer介绍 三十五、QML组件 三十六、QML项目之Image和BorderImage 三十七、Flipable、Flickable和状态与动画 三十八、QML视图 三十QtDeclarative模块 四十、使用Nokia Qt SDK开发Symbian和Maemo终端软件 四十一、Qt网络(一)简介 四十二、Qt网络(二)HTTP编程 四十三、Qt网络(三)FTP(一) 四十四、Qt网络(四)FTP(二) 四十五、Qt网络(五)获取本机网络信息 四十六、Qt网络(六)UDP 四十七、Qt网络(七)TCP(一) 四十八、Qt网络(八)TCP(二)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值