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

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开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!

努力向上生长,是所有生命最灿烂的姿态作为一名北方人,从小到大已经习惯了秋冬时节草木枯败的景象了,甚至产生了一种全世界都会这样的错觉。直到有一次,冬天坐着火车一路向南。窗外从一眼望不到头的枯黄,渐渐地变成了绿意盎然,到酷狗与相信音乐再度携手向前用音乐唤醒美好记忆共创音乐价值在酷狗,有2。3亿人听过刘若英的音乐,有1。9亿人听过五月天的声音,还有1。7亿人听过李宗盛的音乐作品很多人可能不知道,他们都是来自同一家知名唱片公司相信音乐。近日,酷狗音乐对外正三水白坭九大文旅活动开启新一年美好生活逛花田尝美食游古村品文化12月30日,七彩花朝为坭而来三水区白坭镇落实百县千镇万村高质量发展工程暨第四届西江非遗美食文化节首届白坭花朝节开幕。即日起至2023年1月3日,一连五天,魅族要确保魅族20足够惊艳而且我们不仅仅造手机手机中国新闻从种种迹象来看,魅族在准备大招,这个大招肯定不仅仅是新机魅族20系列,可能还有其他东西。魅族1月3日,据数码博主定焦数码爆料,目前挂在魅族科技官博上的魅友大会那张海报有微度假方式日渐风靡,湘西不夜城成为新赛道佼佼者近两年,国内旅游市场呈现出新的消费趋势从旅行到玩乐,从远途到近程,以本地为主说走就走的微度假方式开始流行。马蜂窝旅游近日发布的2021微度假风行报告表明,80后90后是微度假主力人Appium环境搭建及元素定位每天进步一点点,关注我们哦,每天分享测试技术文章本文章出自码同学软件测试码同学公众号自动化软件测试码同学抖音号小码哥聊软件测试01hrAppium简介Appium是一个开源测试自动33岁国脚遭妻子炮轰抛妻弃子,人渣中的战斗机!上港没个好东西在刚结束的足协杯14决赛首回合比赛中,33岁国脚吕文君打进一球,帮助上海海港40击败成都蓉城,一只脚踏进了足协杯4强。不过吕文君却开心不起来,因为他最近这段时间被妻子连续发文炮轰。范弗里特这是一场奇怪的比赛我为我们战斗到最后的方式骄傲直播吧1月5日讯今日NBA常规赛,猛龙在常规时间最后两分钟打出182将比赛拖入加时,但最终101104惜败给雄鹿。两队本场首节比分为1213,赛后范弗里特谈到本场比赛的糟糕开局说道文案抖音很火的情侣之间的情话01。狭路相逢勇者胜,温柔只给意中人,喜欢只给心上人。02。一屋两人,一日三餐,四季有你,这就是爱情最好的归宿。03。为了你,我愿放弃诗与远方,从此柴米油盐酱醋茶,陪你一起将日子过RCEP生效实施满一年!来RCEP朋友圈看看农产品都有哪些尖货根据区域全面经济伙伴关系协定(以下简称RCEP)有关规定,2023年1月2日起,将对原产于印度尼西亚的部分进口商品实施RCEP协定税率。此外,印尼颁布新的贸易法规,帮助企业从RCE央视春晚越办观众越不满意,问题究竟出在哪里?2023年兔年央视春晚还未开播,但当观众们看到央视春晚邀请的这些艺人后就开始反胃呕吐了,这样的春晚还有什么可值得期待的吗?过去,从不讲什么开门办春晚央视,它确确实实是按开门办得春晚
英锦赛丁俊晖进四强必夺冠的定律?职业生涯排名赛冠军战绩纪录英国当地时间11月18日午夜23时50分,随着马克艾伦完成大逆转的最后一杆击出,2022斯诺克英锦赛14决赛尘埃落定,四强全部诞生。英锦赛四强战的战况高潮迭起,丁俊晖蘸了水的六连鞭称重仪式结束,前世界拳王蒙圭亚明天将继续在中量级比赛北京时间2022年11月19日凌晨,在墨西哥瓜达拉哈拉举行的职业拳击中量级比赛的赛前称重仪式中,前WBO超次中量级世界拳王拳王杰米蒙圭亚和他的对手阿根廷拳手冈萨洛科里亚(Gonza爵士骑士交易双赢?NBA新赛季已经进行了17场左右,西部球队从目前各队的战绩来看有些出乎意料,勇士在赛季开局打了几场球后由于球队内讧后面有点掉队。洛杉矶双雄只剩快船战绩还勉强能看过去,西部第一现在是当我真正开始爱自己时,我才发现幸福是多么唾手可得当我开始爱自己,我不再陷于过去不成熟感情的淤泥里,我不再害怕孤单和失去,我不再上课犯困走神,我不再熬夜玩手机,我不再太在乎别人的评价,我不再边说要变优秀努力学习边在那散漫地生活,我11月20日福建新增本土确诊病例20例新增本土无症状感染者22例来源福建省卫健委福建省卫健委通报,11月20日024时,福建新增本土确诊病例20例,新增本土无症状感染者22例。一境外输入疫情11月20日024时,福建省报告新增境外输入确诊病例1赏读人生最踏实的幸福,是好好爱自己作者玉灵人生苦辣酸甜,斗转星移都成了昨天,记忆中的每个故事都渐行渐远。有人把快乐,分为四个层次人的初级快乐,局限于身体的快乐,饱暖物欲人的中级快乐,是精神的快乐,友情爱情亲情诗词歌人生记忆一位在德州的扬州二妹子回忆家乡往事我的父亲1930年11月出生,他14岁之前一直生活在扬州市宝应县曹甸镇的爷爷家,不到10岁那年,他亲眼目睹了自己的家园在日军的铁蹄下被付之一炬,众多乡亲失去生命。曹甸,是京杭大运河山东化工巨头淄博齐翔集团,破产重整落地,拖累之殇未决2022年11月12日,山东省淄博市中级人民法院出具(2022)鲁03破27号之民事裁定书,裁定批准淄博齐翔石油化工集团有限公司(下称齐翔集团)重整计划并终止重整程序。重整计划获得库兹马比尔合砍54分奇才险胜黄蜂北京时间11月21日,NBA常规赛继续进行,此役黄蜂奔赴华盛顿挑战奇才队。首节开打,奇才迅速建立领先优势,比尔连续三分命中,波神也有不俗发挥,贡献大帽以及突破暴扣。下半场黄蜂在乌布小波特关键三分杀死比赛,掘金客场9897战胜独行侠这是一场可能影响东契奇争夺mvp的比赛,主场面对没有约老师的掘金,他们竟然9798爆冷翻船。独行侠完全以东契奇为核心的打法,以及他自己的发挥再次遭到了质疑。同为欧洲天王,同为各自N伊朗26惨败的背后故事,球队拒唱国歌,英格兰队单膝跪地抗议2022世界杯北京时间11月21日深夜,世界杯B组对决正式打响,最终比分为62,英格兰队以摧枯拉朽之势,碾压了伊朗队。一个世界排名第5,一个世界排名第20,看起来差距不应该如此之大