城市直播房产教育博客汽车
投稿投诉
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

一小例子,了解TCP通讯流程Qt示例

1月13日 阴阳狱投稿
  Hi,今天用一个小例子,陈述一下Qt里使用TCP通讯的流程。
  代码链接:
  https:doc。qt。ioqt5examplesnetwork。html运行效果:
  Server端运行效果:
  显示IP端口,然后静静地的等待客户端的连接。
  源码文件:msgservermsgserver。promain。cppserver。cppserver。h
  源码分析如下。
  创建TCPServer
  在构造函数中进行初始化:server。cppServer::Server(QWidgetparent):QDialog(parent),statusLabel(newQLabel){建立TCPServer,并监听tcpServernewQTcpServer(this);tcpServerlisten()获取Server的IP地址,并用其初始化UI〔。。。〕一旦有TCP连接,则调用sendMsg()发送数据给客户端connect(tcpServer,QTcpServer::newConnection,this,Server::sendMsg);}
  要点:
  1、QTcpServer是对TCPbasedserver的封装。
  2、QTcpServer::listen()用于监听是否有客户端发起连接。
  3、一旦有客户端访问,QTcpServer会发出newConnection()信号,我们通过绑定槽函数sendMsg()以实现发送消息的功能。
  嵌入式物联网需要学的东西真的非常多,千万不要学错了路线和内容,导致工资要不上去!
  无偿分享大家一个资料包,差不多150多G。里面学习内容、面经、项目都比较新也比较全!某鱼上买估计至少要好几十。
  点击这里找小助理0元领取:嵌入式物联网学习资料(头条)
  获取ServerIP
  在界面上显示服务端的IP信息:server。cppServer::Server(QWidgetparent):QDialog(parent),statusLabel(newQLabel){创建TCPServer〔。。。〕QStringipA获得所有的IP地址QListQHostAddressipAddressesListQNetworkInterface::allAddresses();解析出第一个可用的IPv4地址for(inti0;iipAddressesList。size();i){if(ipAddressesList。at(i)!QHostAddress::LocalHostipAddressesList。at(i)。toIPv4Address()){ipAddressipAddressesList。at(i)。toString();}}初始化UI〔。。。〕}
  要点:
  1、QNetworkInterface是对网络接口(例如lo、eth0。。。)的封装。
  2、QNetworkInterface::allAddresses()会返回系统里所有的IP地址。
  3、QHostAddress是对IP地址(IPv4、IPv6)的封装。
  4、QHostAddress::toIPv4Address()会将点分式的IPv4地址转换为数字式,例如127。0。0。1会被转换为0x7F000001,失败则返回0。
  给客户端发送消息
  当有客户端连接到来时,槽函数sendMsg()会被调用:server。cppvoidServer::sendMsg(){PreparemessageQByteAQDataStreamout(block,QIODevice::WriteOnly);outmessage〔QRandomGenerator::global()bounded(message。size())〕;GetpendingconnectionQTcpSocketclientConnectiontcpServernextPendingConnection();connect(clientConnection,QAbstractSocket::disconnected,clientConnection,QObject::deleteLater);SendmessageclientConnectionwrite(block);clientConnectiondisconnectFromHost();}
  要点:
  1、QTcpSocket是对TCPSocket的封装。
  2、为了与主机无关(字节序等),这里选用QByteArray以二进制的格式来存储数据。使用QDataStream可以轻松地将Message写到QByteArray里。
  3、QDataStream从各种IO设备(QIODeice的子类),例如QByteArray、文件(QFile)等读写二进制数据。
  4、从QTcpServer::nextPendingConnection()获得客户端的Socket。
  5、用QTcpSocket::write()将Message通过网络发给客户端。
  6、最后,通过QTcpSocket::disconnectFromHost断开连接,它会等待直到数据成功被写出去。
  Client端运行效果:
  每次点击GetMessage按钮,客户端都会从服务端随机获取到一条问候信息。
  源码文件:msgclientmsgclient。proclient。cppclient。hmain。cpp创建TCPSocketclient。cppClient::Client(QWidgetparent):QDialog(parent),hostCombo(newQComboBox),portLineEdit(newQLineEdit),statusLabel(newQLabel(tr(ThisexamplesrequiresthatyouruntheMessageServerexampleaswell。))),getMsgButton(newQPushButton(tr(GetMessage))),tcpSocket(newQTcpSocket(this)){InitUI〔。。。〕SetupQDataStreamssourcein。setDevice(tcpSocket);in。setVersion(QDataStream::Qt510);Setupsignalslotconnect(getMsgButton,QAbstractButton::clicked,this,Client::requestNewMsg);connect(tcpSocket,QIODevice::readyRead,this,Client::readMsg);}
  要点:
  1、用QTcpSocket创建TCPSocket。
  2、将QDataStream数据流的输入源设置为Socket。
  3、设置信号槽:当Socket有数据时,调用readMsg()将其读走。
  从服务端读取消息
  当用户点击GetMessage按钮时,requestNewMsg()会被调用client。cppvoidClient::requestNewMsg(){getMsgButtonsetEnabled(false);tcpSocketabort();tcpSocketconnectToHost(hostCombocurrentText(),portLineEdittext()。toInt());}
  要点:
  1、QTcpSocket::connectToHost()向服务端发起连接。
  2、该函数没有返回值,是因为当有错误发生时,socket会发出error()信号,我们可以通过绑定对应的槽函数进行错误处理。
  3、成功连接后,服务端会随机发送一条信息过来,客户端接收到消息后,readMsg()会被调用。client。cppvoidClient::readMsg(){QSinnextFstatusLabelsetText(nextFortune);getMsgButtonsetEnabled(true);}
  很简单的流操作,读到信息后,将其显示在界面上。
  总结
  用一张图总结一下QtTCP通讯流程:
  原文链接:https:mp。weixin。qq。comsaCyV4HBwzTUZbCrdKsLtBw
  文章转载自:老吴嵌入式
  文章来源于:一小例子,了解TCP通讯流程Qt示例
  原文链接:一小例子,了解TCP通讯流程Qt示例
  版权声明:本文来源于网络,免费传达知识,版权归原作者所有,如涉及作品版权问题,请联系我进行删除
投诉 评论 转载

中国女排大名单正式官宣,蔡斌打造高快战术,副攻为建队核心在一片喝彩声当中中国女排大名单正式官宣了,和之前某媒体爆料的一样,20人的大名单来自于国内10支队伍,其中江苏女排有4人入选,具体名单为:主攻手:李盈莹、王艺竹、金烨、王……霸王龙前肢为何这么短?古生物学家提新论霸王龙骨骼于人类对比图霸王龙(Tyrannosaurusrex)体型庞大彪悍,其上肢却非常短小。古生物学家对此一直觉得很奇怪。最近一份新研究提出了一种解释。人们觉得……西蒙斯首回费城,76人主教练里弗斯乐见敌对竞争,一切球场上见布鲁克林篮网11日将在客场出战费城76人,这将是西蒙斯首度回到费城,虽然他只会在板凳上观战不会出赛,但还是引起关注。对此76人主教练里弗斯今天(10日)表示,他乐见球队之间的敌……最近十几年来最没有创造力的法国世界杯中场德尚公布法国队名单这应该是最近十几年来最没有创造力的法国世界杯中场了。法国国家队主教练德尚终于作出了自己的选择。公布了法国世界杯25人的正式名单。这份名单中落选的,只有中场人员最让人惋惜。……往事如莲悠悠岁月,一年又一年,走过春秋冬夏,我们渐渐在成长,直到有一天,脑中风起云涌,待到冷静时才发现,陌上花开,芳菲的时节,无意与你撞见,然后,你这样的陌生人就这样闯进我的世界,挥一……几分钟搞定的下饭菜,荤素搭配营养全面,懒人一族的福音几分钟搞定的下饭菜,荤素搭配营养全面,懒人一族的福音!微风徐徐,秋意渐浓;不知不觉中,精灵所在的公司,搬来新地方,也一年之久了。从最初的不能接受,到慢慢的习惯,过程是比较……连接器零组件起家,奕东电子受益新能源FPC连接器,盈利稳健(报告出品方分析师:开源证券刘翔林承瑜)1、连接器零组件起家,扩张FPC连接器业务公司以精密电子零组件为主业,2022年1月创业板上市。公司成立于1997年5月,成……A股动力电池回收成新蓝海,这6只龙头谁是下一个宁德时代导火索此次世界动力电池大会上指出,上游原材料的资本炒作给动力电池产业链带来了短期的困扰,碳酸锂、六氟磷酸锂、石油焦等锂电池上游材料均出现价格暴涨。但实际上,矿产资源并不是……一小例子,了解TCP通讯流程Qt示例Hi,今天用一个小例子,陈述一下Qt里使用TCP通讯的流程。代码链接:https:doc。qt。ioqt5examplesnetwork。html运行效果:S……泰国这项服务究竟有啥魔力,为何中国游客如此留恋?体验过才知道泰国这几年凭借旅游行业风生水起,然而它跟我国的距离比较近,因此众多的游客会选择至泰国旅游观光。(此处已添加小程序,请到今日头条客户端查看)一般国内的游客去泰国旅游观光的时……佩服日本女人的执着,夏天不管多闷热,长裤子依然是出门首选七月的天气虽热浪滚滚,但若是光着腿坐在空调房里还是会觉得凉飕飕的,所以干练的长裤依旧是我们日常生活出镜率最高的单品。但是如何能让一条长裤在室内和室外两个温差如此大的环境下,都能……刘丁硕完成了布达佩斯一轮游,龙队悉心安慰,未来可期布达佩斯资格赛第二日,中国队爆出大冷门,曾获得全运会银牌的刘丁硕以0:3的比分意外负于英国选手金克霍尔,这样的结果让不少柳丁的球迷感到意外。在全场比赛中,金克霍尔快速抢攻……
NASA为阿特米斯一号低温示范测试和发射工作设定了新的日期中秋假期出行铁路公路客流回落水路客流环比增加美媒评前10三人组库嘴茶第8詹威眉第6杜欧西第3马大哈第1短发女生清新时尚锅盖头百搭短发娇俏可人人生伤感的说说看了想哭热泪造句用热泪造句大全不推销产品用这个方法让你朋友圈多的订单辽阳小壶口瀑布和太子河畔金沙滩一日休闲游一适合自驾游的线路德瑞幼儿园的老师这样过教师节男人的种特质最讨女人喜欢孕妇可以用加湿器吗孕妇用加湿器需注意这些为什么中国古代的城市是方形而不是圆形是天圆地方的

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找