QT server服务端如何判断客户端断开连接
在QT编程中有时会用到server服务端与客户端进行TCP网络通信,服务端部分代码如下:
1、创建server用于监听客户端套接字
this->server = new QTcpServer(this);
this->server->listen(QHostAddress::Any,);
connect(this->server,SIGNAL(newConnection()),this,SLOT(newConnection()));
2、newConnection()函数
//信号槽函数--新的设备连接
void Widget::newConnection()
{
//查询空闲的套接字
for(int i = ; i<SOCKET_MAXNUM; i++)
{
if(!this->socketFlag[i])
{
this->socketIndex = i;
break;
}
}
this->socket[socketIndex] = this->server->nextPendingConnection();
this->socketFlag[socketIndex] = SOCKET_FLAG_CONNECTED;
connect(this->socket[socketIndex],SIGNAL(readyRead()),this,SLOT(readData()));
scan_Device();
}
3、update_DeviceNetState()函数用于检测更新socket状态
//更新设备连接状态,清理释放过期的SOCKET
void Widget::update_DeviceNetState()
{
int onlineDeviceNum = getChildItemCount(DEVICE_TB_ONLINE_DEVICE);
qDebug()<<"Line-658 当前在线设备数量:"<<onlineDeviceNum;
for(int i = ;i<onlineDeviceNum;i++)
{
int socketID = ui->DEVICE_TABLE->topLevelItem(DEVICE_TB_ONLINE_DEVICE)->child(i)->data(,Qt::SocketIndex).toInt();
bool netState = send_WakeHand(socket[socketID]);
qDebug()<<"此设备在线? "<<netState;
if(netState == STATE_OFFLINE)
{
clearSocket(socketID);
deviceNetStateChange(i,DEVICE_TB_OFFLINE_DEVICE,DEVICE_TB_ONLINE_DEVICE,-);
}
}
}
4、send_WakeHand(QTcpSocket *currSocket) 发送握手信号返回套接字返回值
//发送握手信号,判断设备是否掉线
bool Widget::send_WakeHand(QTcpSocket *currSocket)
{
int ret = currSocket->write("wake hands");
qDebug()<<"ret ="<<ret;
if(ret == -)
return STATE_OFFLINE;
return STATE_ONLINE;
}
5、利用定时器QTimer定时检查更新套接字状态
QTimer *timer = new QTimer(this);
//定时检查更新设备的网络状态
connect(timer,SIGNAL(timeout()),this,SLOT(update_DeviceNetState()));
timer->start();
代码仅供学习参考,未经允许,禁止转载
QT server服务端如何判断客户端断开连接的更多相关文章
- tcp 服务端如何判断客户端断开连接
一篇文章: 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与server端建立连接,然后发送消息给server.我在server端会使用专门的线程处理一条socket连接 ...
- 【VS开发】TCP服务端如何判断客户端断开连接
原文出自:http://www.cnblogs.com/youxin/p/4056041.html 一篇文章: 最近在做一个服务器端程序,C/S结构.功能方面比较简单就是client端与serve ...
- SVN--下载、安装VisualSVN server 服务端和 TortoiseSVN客户端
前言: 在http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html的博客中已经很详细地介绍了SVN的服务器--VisualS ...
- 基于TCP协议套接字,服务端实现接收客户端的连接并发
基于TCP协议套接字,服务端实现接收客户端的连接并发 服务端 import socket from multiprocessing import Process server=socket.socke ...
- 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发
''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() clie ...
- SVN--VisualSVN server 服务端和 TortoiseSVN客户端的基础使用
前言 在上一文http://www.cnblogs.com/wql025/p/5177699.html中,我们讲到了使用SVN的第一步,即下载.安装SVN的服务端软件--VisualSVN serve ...
- Photon Server 服务端编程
Photon Server 和 Unity3D 数据交互: Photon Server 服务端编程 Unity3D 客户端编程 VS2017 之 MYSQL实体数据模 一:Photon Server的 ...
- 全网最详细的PLSQL Developer + Oracle client的客户端 或者 PLSQL Developer + Oracle server服务端的下载与安装过程(图文详解)
不多说,直接上干货! 环境说明: 本地没有安装Oracle服务端,oracle服务端64位,是远程连接,因此本地配置PLSQL Developer64位. Oracle database使用在本机部署 ...
- java 网络编程基础 TCP/IP协议:服务端ServerSocket;客户端Socket; 采用多线程方式处理网络请求
1.Java中客户端和服务器端通信的简单实例 Java中能接收其他通信实体连接请求的类是ServerSocket,ServerSocket对象用于监听来自客户端的Socket连接,如果没有连接,它将一 ...
随机推荐
- 如何将md文件转换成带目录的html文件
配置环境node 去官网下一个node安装包,下一步下一步: 由于现在的node都自带npm,直接 npm install i5ting_toc 这样安装好了i5ting_toc这个包, 进入你实现准 ...
- java 中的 instanceof
instanceof是Java的一个二元操作符,和==,>,<是同一类东东.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是测试它左边的对象是否是它右边的类的实例,返回boo ...
- voa 2015 / 4 / 18
Words in This Story gerund - n. an English noun formed from a verb by adding -ing infinitive - n. th ...
- PHP机器学习库php-ml的简单测试和使用
php-ml是一个使用PHP编写的机器学习库.虽然我们知道,python或者是C++提供了更多机器学习的库,但实际上,他们大多都略显复杂,配置起来让很多新手感到绝望.php-ml这个机器学习库虽然没有 ...
- Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)
Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...
- JAVA入门[22]—thymeleaf
一.thymeleaf官网 官网:https://www.thymeleaf.org/index.html doc:https://www.thymeleaf.org/documentation.ht ...
- JSON的详细介绍
JSON的语法可以表示以下三种类型的值: 简单值:可以表示字符串,数值,布尔值,null,但不支持undefined. 对象(Object):对象作为一种复杂数据类型,表示的是一组无序的键值对儿. 数 ...
- kibana 常用查询方法
下面直接通过实例演示常用的搜索方法 转义特殊字符 + - && || ! () {} [] ^" ~ * ? : \ 注意:以上字符当作值搜索的时候需要用 \ 转义 1.在任 ...
- PHP将数据导出Excel表中(投机型)
1.简介 如何利用最简单粗糙暴力的方法将数据写入Excel文件中呢? 因为ms word和excel的文档都支持html文本格式,因此我们可以基于这个原理采用html文本格式进行数据的输出. 在htm ...
- Java生成MD5加密字符串代码实例
这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ...