Qt 多线程TCP服务端一键关闭所有客户端

任务描述: 实现多线程TCP服务端一键关闭所有客户端的连接。

解决过程: 1、Qt的服务端提供了close的功能,但是只用来不响应新接入的客户端。
手册中是这样描述的:
void QTcpServer::close()
Closes the server. The server will no longer listen for incoming connections.

2、既然是多线程的服务端,每个客户端对应一个线程,那么将所有的线程都退出或者终止不就可以实现关闭所有的客户端了。

代码实现过程:
1、创建 threadList 成员用来管理线程

QList<serverThread *>threadlist;

2、修改incomingConnection()函数如下,对每一个客户端创建一个线程,同时将线程的指针地址添加threadlist中.

void MyTcpServer::incomingConnection(int sockDesc)
{threadCount++;m_socketList.append(sockDesc);thread = new serverThread(sockDesc);threadlist.append(thread);//显示连接数connect(thread, SIGNAL(connectTCP(int,QString )), m_Widget, SLOT(showConCont(int,QString)));//显示客户端IPconnect(thread, SIGNAL(connectTCP(int,QString )), m_Widget, SLOT(showConnection(int,QString)));connect(thread, SIGNAL(disconnectTCP(int,QString)), m_Widget, SLOT(showDisconnection(int,QString)));connect(thread, SIGNAL(disconnectTCP(int,QString)), this, SLOT(disconnect(int,QString)));connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));//接收数据connect(thread, SIGNAL(dataReady(const QString&, const QByteArray&)),m_Widget, SLOT(recvData(const QString&, const QByteArray&)));//发送数据dconnect(m_Widget, SIGNAL(sendData(int,QString, const QByteArray&)),thread, SLOT(sendDataSlot(int,QString, const QByteArray&)));thread->start();}

2、实现信号槽函数,实现关闭所有线程。在调试的过程中发现,如果delete thread[i],可能会导致程序出错。
注意到 connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); 当线程终止的时候,自动会清理内存,所以不需要手动清理。为了避免列表对象只增不减,所以每当服务端关闭的时候,同时也清理线程列表。

void MyTcpServer:: disconnectAll()
{for(int i = 0;i<threadlist.length();i++){if(threadlist[i]->isRunning()){threadlist[i]->quit();threadlist[i]->wait();qDebug()<<i;//delete threadlist[i];   //清理对象}else{qDebug()<<"thread i is not runnint!";}}threadlist.clear();   //清理线程列表
}

3、主窗口点击断开链接后,发送断开所有连接的信号,所以需要将此信号与信号槽disconnectAll()关联。

   connect(this, SIGNAL(disconnectAllClients()), m_server, SLOT(disconnectAll()));

4、最后完善主界面的uI的显示部分

        severDisc = true;emit disconnectAllClients();ui->comboBox_ClientIP->clear();    ui->pushButton_Listen->setText("侦听");ui->statusbar->showMessage("服务端关闭所有的连接!");      m_server->close();    //服务器将不再监听新接入的客户端

这样就完成了。

Qt 多线程TCP服务端一键关闭所有客户端相关推荐

  1. Qt多线程 TCP 服务端

    Qt实现 多线程 TCP 服务端 因为项目中要用到TCP客户端的并发处理,所以TCP服务端用多线程去实现是必要的.于是花了一大早上的时间写了一各Demo 如图: 主要关键代码: 关于线程的处理.关于线 ...

  2. Qt中TCP服务端编程

    文章目录 1 Qt中的TCP服务端编程 1.1 TCP服务端编程介绍 1.2 Qt中的TCP服务端编程 1 Qt中的TCP服务端编程 1.1 TCP服务端编程介绍 网络中的服务端: 服务端是为客户端服 ...

  3. Qt 的 tcp服务端讲解

    TCP TCP : (Tramsmission Control Protocl)传输控制协议,一种面向连接的,可靠的,基于字节流的传输层通信协议. 本文目标 实现一个简单的服务器,可以接受客户端的信息 ...

  4. MFC:Socket编程—TCP服务端和多个客户端通信

    前言 MFC是微软基础类库,于 C++ 对于 C语言来说,MFC对于window API ,MFC 就相当于C++,window API 相当于C.MFC 封装了 window API 使用起来更加的 ...

  5. QT 之 TCP 服务端 连接 多客户端 处理学习

    自学QT中, 在此记录一下TCP多链接的方法. 跟着 "Qt Creator快速入门" 学了一段时间了,刚接触网络编程, 例子中仅仅简单的 用 客户端 连接了一下 服务端, 然后 ...

  6. 为什么TCP服务端需要调用bind函数而客户端通常不需要呢

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 那一年, ...

  7. Qt:Qt实现Winsock网络编程—TCP服务端和客户端通信(多线程)

    Qt实现Winsock网络编程-TCP服务端和客户端通信(多线程) 前言 感觉Winsock网络编程的api其实和Linux下网络编程的api非常像,其实和其他编程语言的网络编程都差不太多.博主用Qt ...

  8. pythontcp服务器如何关闭阻塞_python实现单线程多任务非阻塞TCP服务端

    本文实例为大家分享了python实现单线程多任务非阻塞TCP服务端的具体代码,供大家参考,具体内容如下 # coding:utf-8 from socket import * # 1.创建服务器soc ...

  9. 【服务端】多线程游戏服务端

    多线程游戏服务端 一.系统介绍 二.系统架构 2.1 Sunnet进程的运行 2.1.1 SocketThread线程的运行 2.1.2 WorkerThreads线程的运行 2.1.3 TimerT ...

最新文章

  1. 一份火爆国外的PyCharm快捷键和Python代码速查表
  2. react脚手架快速创建react项目
  3. vuejs 轮播_如何在VueJS中设计和构建轮播功能
  4. Div+CSS布局入门教程(四) 页面顶部制作之二
  5. (27)FPGA面试题动态时序模拟
  6. java中case语句_Java:switch-case语句
  7. ubuntu中安装sqldeveloper和JDK 1.7
  8. 这样去分析大盘才能稳赚不亏best
  9. SVN:Attempted to lock an already-locked dir svn: Working copy '工作空间路径/lib' locked
  10. SM系列国密算法简介
  11. 苹果8android价格,iphone8plus相当于什么档次的安卓机?从这3方面就可看出
  12. C语言 输入一个数值,分析是正还是负,并打印出此数
  13. hdu3265(好题翻译)
  14. resolver error connecting with ssh timed out
  15. 经典力学(动力学)——动量守恒定律与能量守恒定律
  16. 五步详解小学数学之盈亏问题
  17. NetBIOS网络基本输入/输出系统协议分析
  18. 希网邮件列表小偷程序
  19. 【CV】DeepLab:使用DCNN、空洞卷积和全连接条件随机场的图像语义分割网络
  20. c语言实现FCFS SJF算法,实现FCFS和SJF调度算法.docx

热门文章

  1. [云炬创业基础笔记]第一章创业环境测试1
  2. <马哲>商品二因素及其辩证关系2017-12-27
  3. jsp可以使用iframe_使用 JavaScript object URLs,可以处理图像、音频和视频
  4. mssql 计划怎每隔n秒_前端:调你一个接口6秒还配资深工程师?后端:有24部分需要处理!...
  5. 关于NHibernate
  6. 快速融入新团队的一点个人体会
  7. golang的GUI库,使用go-fyne设计一个代办事项APP
  8. leetCode-第四题求两个数组的中位数
  9. 【CyberSecurityLearning 77】DC系列之DC-8渗透测试(Drupal)
  10. BugkuCTF-Misc:这是一张单纯的图片