范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Qt入门第36篇网络(六)UDP

  导语
  这一节讲述UDP编程的知识。UDP(UserDatagram Protocol即用户数据报协议)是一个轻量级的,不可靠的,面向数据报的无连接协议。对于UDP我们不再进行过多介绍,如果你对UDP不是很了解,而且不知道它有什么用,那么这里就举个简单的例子:我们现在几乎每个人都使用的腾讯QQ,其聊天时就是使用UDP协议进行消息发送的。就像QQ那样,当有很多用户,发送的大部分都是短消息,要求能及时响应,并且对安全性要求不是很高的情况下使用UDP协议。
  在Qt中提供了 QUdpSocket   类来进行UDP数据报(datagrams)的发送和接收。这里我们还要了解一个名词Socket,也就是常说的"套接字"。 Socket简单地说,就是一个IP地址加一个port端口。因为我们要传输数据,就要知道往哪个机子上传送,而IP地址确定了一台主机,但是这台机子上可能运行着各种各样的网络程序,我们要往哪个程序中发送呢?这时就要使用一个端口来指定UDP程序。所以说,Socket指明了数据报传输的路径。
  下面我们将编写两个程序,一个用来发送数据报,可以叫做客户端;另一个用来接收数据报,可以叫做服务器端,它们均应用UDP协议。这样也就构成了所谓的C/S(客户端/服务器)编程模型。我们会在编写程序的过程中讲解一些相关的网络知识。
  环境:Windows Xp + Qt 4.8.5+QtCreator 2.8.0  目录一、发送端(客户端)  二、接收端(服务器端)  正文
  【领QT开发教程 学习资料,点击下方链接莬费领取↓↓ ,先码住不迷路~】
  点击→领取「链接」
  一、发送端(客户端)
  1.新建Qt Gui应用。 项目名为 udpSender  ,基类选择 QWidget  ,类名为 Widget  。完成后在 udpSender.pro  文件中添加一行代码: QT += network  ,并保存该文件。
  2.在 widget.ui  文件中,往界面上添加一个 Push Button  ,更改其显示文本为"开始广播",然后进入其单击事件槽函数。
  3.我们在 widget.h  文件中更改。
  添加头文件: #include
  添加private私有对象: QUdpSocket *sender;
  4.我们在 widget.cpp  中进行更改。
  在构造函数中添加: sender = new QUdpSocket(this);
  更改"开始广播"按钮的单击事件槽函数:  void Widget::on_pushButton_clicked() // 开始广播 {     QByteArray datagram = "hello world!";     sender->writeDatagram(datagram.data(),datagram.size(),                           QHostAddress::Broadcast,45454); }
  这里定义了一个 QByteArray  类型的数据报 datagram  ,其内容为"hello world!"。然后我们使用 QUdpSocket  类的 writeDatagram()  函数来发送数据报,这个函数有四个参数,分别是数据报的内容,数据报的大小,主机地址和端口号。对于数据报的大小,它根据平台的不同而不同,但是这里建议不要超过512字节。这里使用了广播地址 QHostAddress::Broadcast  ,这样就可以同时给网络中所有的主机发送数据报了。对于端口号,它是可以随意指定的,但是一般1024以下的端口号通常属于保留端口号,所以我们最好使用大于1024的端口,最大为65535。我们这里使用了45454这个端口号,一定要注意,在下面要讲的服务器程序中,也要使用相同的端口号。
  5.发送端就这么简单,下面可以先运行程序。
  二、接收端(服务器端)
  1.新建Qt Gui 应用
  工程名为 udpReceiver  ,基类选择QWidget,类名为 Widget  。完成后在 udpSender.pro  文件中添加一行代码: QT += network  ,并保存该文件。
  此时工程文件列表中应包含两个项目,如下图。
  2.我们在 udpReceiver  项目中的 widget.ui  文件中,向界面上添加一个 Label  部件,更改其显示文本为"等待接收数据!",效果如下。
  3.我们在 udpReceiver  工程中的 widget.h  文件中更改。
  添加头文件: #include
  添加private私有对象: QUdpSocket *receiver;
  添加私有槽函数:  private slots: void processPendingDatagram();
  4.我们在 udpReceiver  工程中的 widget.cpp  文件中更改。
  在构造函数中:  receiver = new QUdpSocket(this); receiver->bind(45454,QUdpSocket::ShareAddress); connect(receiver,SIGNAL(readyRead()), this,SLOT(processPendingDatagram()));
  我们在构造函数中将 receiver  绑定到45454端口,这个端口就是上面发送端设置的端口,二者必须一样才能保证接收到数据报。这里使用了绑定模式 QUdpSocket::ShareAddress  ,它表明其他服务也可以绑定到这个端口上。因为当 receiver  发现有数据报到达时就会发出 readyRead()  信号,所以将其和数据报处理函数相关联。
  数据报处理槽函数实现如下:  void Widget::processPendingDatagram() //处理等待的数据报 {     while(receiver->hasPendingDatagrams())  //拥有等待的数据报     {        QByteArray datagram; //拥于存放接收的数据报 //让datagram的大小为等待处理的数据报的大小,这样才能接收到完整的数据        datagram.resize(receiver->pendingDatagramSize());        //接收数据报,将其存放到datagram中        receiver->readDatagram(datagram.data(),datagram.size());        //将数据报内容显示出来        ui->label->setText(datagram);     } }
  5.我们在项目列表中 udpReceiver  项目上点击鼠标右键,在弹出的菜单上选择run菜单来运行该工程。如下图所示。
  6.第一次运行该程序时,系统可能会提示警告,我们选择"解除阻止"。 注意,如果是在linux下,你可能还需要关闭防火墙。
  7.我们同时再运行 udpSender  程序。然后点击其上的"发送广播"按钮,这时会在 udpReceiver  上显示数据报的内容。效果如下。
  结语
  可以看到,UDP的应用是很简单的。我们只需要在发送端执行 writeDatagram()  函数进行数据报的发送,然后在接收端绑定端口,并关联 readyRead()  信号和数据报处理函数即可。
  下一节我们讲述TCP的应用。

这样的孩子是来讨债的吗?你们怎么看呢?头条创作挑战赛曾仕强教授说过子女有两种,一种是来报恩的,还有一种是来讨债的。我一个亲戚的孩子,从小聪明聆利,成绩一直是班上名列前茅,老师同学也特别喜欢他,一直当着班长。他一直是家里血型遗传规律A血型B血型的孩子会是什么血型?ABO血型系统人类的血液内有以下的抗原抗体,组成不同的血型A型血的人红血球表面有A型抗原他们的血清中会产生对抗B型抗原的抗体。一个血型为A型的人只可接受A型或O型的血液。B型血的人呵护孩子很重要,呵护女儿更重要!作为父母,保护和照顾女儿是我们最重要的责任之一,而在现代社会中,各种纷繁复杂的情形让父母们非常担忧自己的女儿会受到各种形式的伤害。下面,本文将介绍一些方法,以帮助父母更好地保护女儿南京溧水河长制公园正式揭牌扬子晚报记者3月22日讯(记者姜婧仪通讯员王旭峰)以前这里是建材城,没想到现在变成了河畅水清景美的小公园。3月22日,南京溧水河长制公园正式揭牌,这让附近小区的居民们都惊喜不已。活八弓镇桃花盛开迎客来来源三穗县人民政府图片新闻近日,八弓镇新美村1200余亩桃花相继绽放,大地如同披上了一层粉色的霞帔,美不胜收,游客们三三两两穿梭其间,构成了一幅美丽迷人的春日田园风光图。近年来,八赏花好时节来源经济日报空中俯瞰江苏省兴化市千垛景区,身披金装的垛田与河道交错纵横,美不胜收。计海新摄(中经视觉)四川省眉山市仁寿县曹家镇的3。2万亩梨花竞相绽放,吸引众多游客前来踏春赏花。潘赏花正当时垫江牡丹文化节23日开幕垫江牡丹花。垫江县委宣传部供图3月23日,2023年垫江牡丹文化节暨世界牡丹大会垫江分会场活动将在重庆市垫江县开幕,持续至4月下旬。今年的垫江牡丹文化节由重庆市文化和旅游发展委员会文旅赋能乡村振兴,第四届长三角乡村文旅创客大会在湖州南浔举行新民晚报讯(记者唐闻宜)今年春节,湖州南浔古镇宣布永久免费,刷屏网络。7天古镇接待游客38万人次,实现营收2。287亿元,比2019年增长265,为全国文旅市场复苏开了个好头。而这真美!五角场环岛郁金香盛放!来赏郁金香啦阳春三月,芬芳满城。今天,我们迎来了春分节气,万物生发的季节,各色春花悄悄绽放。现在的五角场环岛,正沉浸在绚烂的郁金香花海中。记者从上海杨浦园林绿化建设养护有限责任公司去寺庙烧香,这四尊菩萨,一定要拜一拜很多人去寺庙,都喜欢拜一拜菩萨,如果你在烧香时,遇到了这四尊菩萨,一定要拜一拜。菩萨的全称是菩提萨埵,觉智道之意,萨埵,众生有情之意,与声闻缘觉合称三乘。即指以智上求无上菩提,以悲官宣了!4月1日起4月1日起海南离岛免税购物可担保即提即购即提海关总署财政部国家税务总局3月21日联合发布关于增加海南离岛免税购物担保即提和即购即提提货方式的公告,从4月1日起新增担保即提和即购即提
CBA十五轮结束各球队最新排名浙江的虎头和宁波的蛇尾岿然不动!浙江稠州金租妥妥的联盟老大!本赛季浙江稠州金租就是CBA联盟中一个无敌的存在!十五轮过去,至今为止还未曾尝过失败的滋味!本赛季这支无敌的球队绝杀了曾经的十一冠王广东队以10260大贝索斯给未婚妻过生日好隆重!53岁女友穿低胸迷你裙,身材太燃了大富豪贝索斯的未婚妻桑切斯在周一迎来了53岁生日,贝索斯为了让女友开心,特意准备一个很隆重的生日晚宴,而迎来53岁的生日的桑切斯,当天的着装可真是超级性感啊!一桑切斯穿低胸迷你裙太数据中心的冷却能耗转自香港IDC新天域互联12月18日,阿里云香港PCCW机房制冷设备发生故障,导致香港及澳门多个网站受到影响。香港相关机房冷却设备虽在当天稍晚时间恢复,但本次故障事故影响甚广,可见微信分身怎么设置?帮你分开工作与生活微信分身怎么设置?微信是我们每天都在用的一款工具,工作和生活都用得到。有些人喜欢将工作和生活分开,会有两个微信号,但是微信怎么分身两个微信呢?今天小编就带来几个比较好用的办法,帮你时尚女装米兰时装秀冬季休闲宝宝雪地靴帽子围巾网红小配饰毛衣正如我们必须而且确实将其视为包括一点点好的很多坏的,以及更多无所谓的。一旦实现了这一点,并且只有在那时,机械因素的全部意义才是显而易见的。让我们回到前机械时代,那时只有少数人有机会优秀的全场景出行体验试驾全新EQS纯电SUV在梅赛德斯奔驰正式宣告进军电动车市场时,我相信许多消费者都和我一样在想一个问题,奔驰造的电动车到底什么样?然而随着时间的发展,EVA纯电平台的到来,纯电EQS纯电EQE等车型的上市内衣周刊新品速递菲黛尔邂逅系列C位出道燃情上市或许我们都一样,习惯于每个不同的阶段自己走过的路,仿佛看到曾经的自己,在不可知的路上一路寻找的身影,每一片色彩,第一段声音每一次相逢在记忆的角落里影影绰绰,如同时间在沿途留下的行迹阳气不足,5味药材来催发!温脾温肾热腰膝,解决困乏无力在临床上经常遇到一些这样的患者,手脚,四肢常年冰凉,尤其是到气温下降的时候,会出现冷痛,四肢伸缩不利的情况。这种情况就是说我们身体里缺少了一个小太阳,也就是阳气不足的情况,而阳气不中药天丁,可用于治疗各种结节一般来说,生气上火都爱往上走,尤其是体质热的就会出现长甲状腺结节淋巴结肿大。如果体质虚寒,寒湿比较重的,又经常吃生冷黏滑食物,生气发脾气,那么就会患上卵巢囊肿或子宫肌瘤。所以,不管小儿羊了以后相关问题自从放开以后,很多朋友都变羊了,很多宝妈们不害怕自己中招,但是害怕自己的宝贝中招,宝宝中招后妈妈心疼焦虑,最关心的问题是在家怎么护理,药物怎么选择,该不该去医院治疗,很多妈妈看着体CBA最新积分榜江苏6794广厦挺进前8北京时间2022年12月18日,20222023赛季CBA常规赛第15轮继续进行,在第一比赛日的4场比赛中,具体战报信息如下四川金荣实业105116输广东大益茶青岛国信水产9990