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

QT之TCP通信

  QT之TCP通信
  QT中可以通过TCP协议让服务器和客户端之间行通信。所以下面我就围绕服务器和客户端来写。
  这是我们写服务器和客户端的具体流程:
  A、服务器:
  1.创建QTcpServer对象
  2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号)
  3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)
  4.QTcpsocket发送数据用成员方法write,
  5.读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据
  B、客户端 :
  1.创建QTcpSocket对象
  2.链接服务器connectToHost(QHostAddress("ip"),端口号)
  3.QTcpsocket发送数据用成员方法write,
  4.读数据当对方有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据 【相关文章推荐】
  点击领取→Qt开发进阶技术栈学习路线+资料
  我们需要调用到的头文件有两个: #include    #include 
  我们先要在工程文件中加入network QT       += core gui network
  下面我们来看看服务器程序步骤:
  1、初始化服务器server对象 mServer = new QTcpServer();
  2、启动监听服务器   mServer->listen(QHostAddress::Any,9988);//9988为端口号
  3、当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket)  connect(mServer,SIGNAL(newConnection()),this,SLOT(new_client()));  mSocket = mServer->nextPendingConnection();//与客户端通信的套接字
  4、发送数据  mSocket->write(msg.toUtf8());
  5、读数据当客户端有数据来,QTcpSocket对象就会发送readyRead信号,关联槽函数读取数据  connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_client_data()));
  6、连接多个客户端  //可以实现同时读取多个客户端发送过来的消息  QTcpSocket *obj = (QTcpSocket*)sender();
  7、检测掉线  connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis())); //检测掉线信号
  下面是服务器的实现的具体代码: #include "tcpserver.h" #include "ui_tcpserver.h" #include  TcpServer::TcpServer(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::TcpServer) {     ui->setupUi(this);     //初始化服务器server对象     mServer = new QTcpServer();     //关联客户端连接信号newConnection     connect(mServer,SIGNAL(newConnection()),this,SLOT(new_client())); //连接客户端     //启动服务器监听     mServer->listen(QHostAddress::Any,9988);  }  TcpServer::~TcpServer() {     delete ui; }  void TcpServer::new_client() {     qDebug()<<"新客户段连接";     mSocket = mServer->nextPendingConnection();//与客户端通信的套接字     //关联接收客户端数据信号readyRead信号(客户端有数据就会发readyRead信号)     connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_client_data()));     //检测掉线信号     connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis()));  }  void TcpServer::read_client_data() {     //可以实现同时读取多个客户端发送过来的消息     QTcpSocket *obj = (QTcpSocket*)sender();     QString msg = obj->readAll();     qDebug()<peerAddress().toString();//打印出掉线对象的ip }
  说完服务器那我们继续来看看客户端是怎么实现的:
  1、创建QTcpSocket对象 【相关文章推荐】
  点击领取→Qt开发进阶技术栈学习路线+资料 mSocket = new QTcpSocket();
  2、链接服务器connectToHost(QHostAddress("ip"),端口号),连接服务器ip和端口号  mSocket->connectToHost(ui->ipEdit->text(),ui->portEdit->text().toInt()); //ui->ipEdit->text():ip,ui->portEdit->text().toInt():端口号
  3、发送数据 //取发送信息编辑框内容 QString msg = ui->sendEdit->toPlainText(); mSocket->write(msg.toUtf8());//转编码
  4、检测链接成功信号关联槽函数  connect(mSocket,SIGNAL(connected()),this,SLOT(connect_suc()));
  5、检测掉线信号  connect(mSocket,SIGNAL(disconnected()),this,SLOT(client_dis()));
  6、服务器和客户端关闭都可以使用close  mSocket->close();
  这是客户端实现的具体代码 #include "tcpclient.h" #include "ui_tcpclient.h" #include  TcpClient::TcpClient(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::TcpClient) {     ui->setupUi(this);     //初始化套接字对象     mSocket = new QTcpSocket();     //关联数据信号     connect(mSocket,SIGNAL(readyRead()),this,SLOT(read_data()));  }  TcpClient::~TcpClient() {     delete ui; }  void TcpClient::read_data() {     QString msg = mSocket->readAll();     qDebug()<connectToHost(ui->ipEdit->text(),ui->portEdit->text().toInt());  }  void TcpClient::on_btn_send_clicked() {     //取发送信息编辑框内容     QString msg = ui->sendEdit->toPlainText();     mSocket->write(msg.toUtf8());//转编码 }  void TcpClient::connect_suc() {     ui->btn_connectServer->setEnabled(false);//如果连接成功则连接按钮不能按下 } void TcpClient::client_dis() {     ui->btn_connectServer->setEnabled(true);//如果连接没有成功则连接按钮还可以按下 }
  这是服务器和客户端分开两个文件夹写的程序,在这里我也实现了服务器和客户端写在同一个文件中
  具体代码如下:
  头文件:tcpapp.h
  View Code
  源文件:tcpapp.cpp
  View Code
  界面文件tcpapp.ui如下图
  此外这里还使用到了容器,在这里讲讲容器的使用
  1、定义容器对象 QVector clients; //存储所有在线客户端(容器)   解释:QTcpSocke*  容器的类型        clients  容器名
  2、往容器中添加成员 //上线用户添加到客户列表容器  clients.append(mSocket);
  3、寻找某个成员在容器中位置  int row = clients.indexOf(obj);//找到掉线对象的内容所在的行
  4、从容器中删除成员   clients.remove(row);//从容器中删除成员
  如果你对QT开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!

老年痴呆的原因揪出来了老年痴呆的原因揪出来了个习惯!请快戒掉!3个习惯,劝你趁早改掉长期饱食最常见的伤脑行为是长期饱食的生活习惯。长期饱食,容易导致脑动脉硬化,出现大脑早衰和智力减退现象。所以每餐坚持只别再做熬夜星人了,看看这几点提高睡眠质量觉睡不好,会影响新陈代谢,快来看看怎么做才能提高睡眠质量吧!据统计,中国超3亿人存在睡眠障碍,其中超过34的人晚上11点以后入睡,其中近13的人凌晨1点以后入睡。你的睡眠还好吗?其米兰看秀肖战巨星待遇,宋慧乔许光汉同框养眼,不过双手暴露年龄国际时装周如火如荼的举行,各大品牌纷纷邀请明星看秀,一般都是邀请代言人亲临现场看秀,目的还是通过明星的看秀引发粉丝们的围观,从而起到一定的宣传效果。肖战受到两个品牌的邀请,凌晨现身正行诗歌一声春雷,唤醒沉睡已久的父亲每日好诗阳春面馆先于鸟鸣与晨曦一座城在梦呓中醒来与城一同醒来的还有街头的阳春面馆秘制的羊汤面洋溢着父亲的味道一声春雷,唤醒一座城一同被唤醒的还有沉睡已久的父亲他挑着祖传的面担进了城刘诗诗生图曝光,穿白衬衫背带裙俏皮甜美,眼角纹暴露年龄很多时候,我们看到的明星美图,都是精修之后的。毕竟明星们都非常在意自己的形象,也想要以最完美的姿态示于人前。所以图片的加工和修饰,也是一种比较常态化的事情。相对于精修图,生图具有更皇马满腹怨气,迎战巴萨有机会复仇文羊城晚报全媒体记者刘毅3月3日凌晨,西班牙国王杯半决赛首回合将上演西班牙国家德比,皇家马德里主场迎战巴塞罗那。周二凌晨在国际足联年度颁奖典礼上,皇马主帅安切洛蒂和全体球员拒绝出席全尤文尤文有意赫塔菲前锋乌纳尔和塞维利亚后卫夸西直播吧3月2日讯据全尤文报道,尤文看上了赫塔菲前锋乌纳尔和塞维利亚后卫夸西。24岁的乌纳尔是一名土耳其前锋,他在2020年加盟赫塔菲,本赛季已经在西甲联赛打进8球。如果弗拉霍维奇今赖特切尔西需要前锋,我不理解奥巴梅扬为何无法上场比赛直播吧3月1日讯在PremierLeagueProductions节目中,阿森纳传奇射手伊恩赖特谈到了切尔西前锋奥巴梅扬的情况,他表示自己不知道那里发生了什么,切尔西需要一名前锋,长期喝电热水壶烧的水,重金属超标还会致癌?是真的吗?真相来了李阿姨是一个非常热爱养生的人,年轻时候就喜欢吃清淡的饮食,如今退休上了年纪就更加注意自身的保养,经常在网络上看一些关于养生的文章。这一天李阿姨在客厅看电视,看到老伴王叔叔用电热水壶河南周口楼市的危机,激进的周口,低廉的房价,周口市楼市的潜力现在的河南省也是全国的经济大省,在过去的2022年,河南省共完成经济总量6。13万亿,在全国所有省份当中名列第5位。这几年河南各大城市经济发展非常快,城市建设更是日新月异。但对于楼珠三角外贸冷暖从前是我求货代,现在是货代求我中国经济周刊记者伍素文丨广东报道珠三角外贸企业竞速出海抢订单大年初七以后,广东蒙娜丽莎贸易公司(下称蒙娜丽莎)总经理冯旭锋跟同事就开始忙着外出参展和拜访接待一批又一批前来考察的客人
成绩最差也排第七,屡战屡胜,这个赛季,四支升班马太强势头条创作挑战赛当中超老牌劲旅广州队广州城河北队为保级而苦苦挣扎的时候,本赛季的四支升班马武汉三镇成都蓉城浙江队梅州客家却在中超大展雄威不断赢球。这个赛季的升班马太强势了,注意,不是社保基金高比例持有科创板股名单财报季,社保基金持股动向曝光!二季度末社保基金共现身64只个股前十大流通股东榜,新进21只,增持25只。证券时报数据宝统计显示,社保基金最新出现在64只科创板股前十大流通股东名单中提醒30岁后的男性,坚持这几个养生方法,让你体态年轻不显老原创内容,擅自搬运者必究!30岁后是一个人的分水岭,身体各项机能开始走下坡路线,肌肉也开始流失,精力开始大不如前,40岁后的人尤为明显。想要保持年轻的状态,我们一定要保持足够的自律热血传奇谁说的176之后再无传奇小编我近来听网友投稿说热血传奇游戏1。76游戏版本最经典,1。76从此再无热血传奇,我寻思特意写1期一篇文章来和大家讨论讨论。很多人都说1。51。01。28游戏版本全是经典的游戏版热血传奇神秘8L现身!传奇怀旧推出,只为再次登顶传奇哈喽大家好,作为一款跨时代的网游,在当年国内的热血传奇,热度丝毫不逊色与目前的英雄联盟或者枪战这些游戏。在大量的玩家中,也出现了巨多大佬级的人物,说到这,玩过传奇的,也就知道这期要龙之家族口碑逆转,权游味儿热血来了龙之家族E03SecondofHisName已经上线。如果说龙之家族开局不太理想的话,那么这一集就是彻底扭转局势的一集。低开高走,渐入佳境。在前两集中并不讨喜的国王弟弟戴蒙,先是一按摩穴位能缓解三叉神经痛吗?按摩穴位能缓解三叉神经痛吗?这个还是因人而异的。有少量的患者,可能会有一定的作用,但对大部分患者治疗作用可能还不是那么大的,到底是哪个位置穴位更好,也是根据患者有所不同。再就是,根路特斯ELETRE将10月正式上市基于EPA架构打造太平洋汽车网新车频道近日,我们从相关渠道处获悉,路特斯ELETRE(询底价查参配)将于10月正式公布价格并上市。新车已于此前开启预售,用户可登陆路特斯尊享小程序路特斯APP及官网进正式标价!红魔已经行动了,欲抢英格兰新星两场英超延期给了曼联新援们更多磨合的机会。根据转会专家罗曼诺最新的油管视频内容,曼联有了全新的引援目标滕哈格仍在寻找与德容战术作用匹配的替代者,而多特方面正式给19岁中场贝林汉姆标法拉利首款SUV正式发布法拉利全新SUV命名为Purosangue车身尺寸长4。97米宽2。03米高1。59米,轴距3。02米,定义中型SUV动力匹配6。5LV12,725马力,0100加速3。3秒,匹配LOL12。16版本更新乌迪尔重做,杰斯刀妹加强,皎月德莱文削弱英雄联盟游戏客户端已于8月25日凌晨1点开始全区停机维护,进行12。16版本游戏的更新。本次更新的大致内容如下随着全球总决赛的逐渐临近,英雄联盟团队希望让你了解到,这是一系列版本中