-
大小: 14KB文件类型: .rar金币: 1下载: 0 次发布日期: 2021-06-14
- 语言: 其他
- 标签: Qt tcpServer client.... 心跳检测
资源简介
Qt使用tcp实现的简单服务端和客户端(带心跳检测)。。很基础的实现,大概适合对Qt tcpsever 不太清楚的人看。。
代码片段和文件信息
#include
#include
#include
#include
#include “chatsocket.h“
#include “mymessagedef.h“
ChatSocket::ChatSocket(qintptr socketDescriptor Qobject *parent)
: QTcpSocket(parent)
{
if (!setSocketDescriptor(socketDescriptor))
{
emit consoleMessage(errorString());
deleteLater();
}
m_heartbeat = new QTimer(this);
m_heartbeat->setInterval(30000);
m_lastTime = QDateTime::currentDateTime();
connect(this &ChatSocket::readyRead this &ChatSocket::heartbeat);
connect(this &ChatSocket::readyRead this &ChatSocket::readClientData);
connect(this &ChatSocket::disconnected this &ChatSocket::onDisconnected);
connect(m_heartbeat &QTimer::timeout this &ChatSocket::checkHeartbeat);
m_data.clear();
m_heartbeat->start(); //开始心跳
}
ChatSocket::~ChatSocket()
{
}
void ChatSocket::heartbeat()
{
if (!m_heartbeat->isActive())
m_heartbeat->start();
m_lastTime = QDateTime::currentDateTime();
}
void ChatSocket::checkHeartbeat()
{
if (m_lastTime.secsTo(QDateTime::currentDateTime()) >= 30) //检测掉线,停止心跳
{
qDebug() << “heartbeat 超时 即将断开连接“;
m_heartbeat->stop();
disconnectFromHost();
}
}
void ChatSocket::onDisconnected()
{
emit clientDisconnected(peerAddress().toString());
emit consoleMessage(peerAddress().toString() + “ 断开连接..“);
deleteLater();
}
void ChatSocket::readClientData()
{
static int got_size = 0;
static MSG_TYPE type = MT_UNKNOW;
static MSG_MD5_TYPE md5;
if (m_data.size() == 0) //必定为消息头
{
QDataStream in(this);
in.setVersion(QDataStream::Qt_5_9);
MSG_FLAG_TYPE flag;
in >> flag;
if (flag != MSG_FLAG)
return;
in >> type;
if (type == MT_HEARTBEAT) //心跳检测,直接返回
return;
MSG_SIZE_TYPE size;
in >> size >> md5;
m_data.resize(size);
}
else //合并数据
{
QByteArray data = read(bytesAvailable());
m_data.replace(got_size data.size() data);
got_size += data.size();
}
if (got_size == m_data.size()) //接收完毕
{
QByteArray md5_t = QCryptographicHash::hash(m_data QCryptographicHash::Md5);
if (md5 == md5_t) //正确的消息
{
QString str = QString::fromLocal8Bit(m_data.data());
emit consoleMessage(QString(“md5 一致,消息为:\““ + str + “\“,大小:“ + QString::number(m_data.size())));
switch (type)
{
case MT_SHAKE:
break;
case MT_TEXT:
break;
default:
break;
}
}
got_size = 0; //重新开始
type = MT_UNKNOW;
md5.clear();
m_data.clear();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 382534 2017-10-16 12:14 ChatServer\9.jpg
文件 1259 2018-04-11 21:24 ChatServer\ChatServer.pro
文件 3141 2018-04-13 19:25 ChatServer\chatsocket.cpp
文件 636 2018-04-13 19:42 ChatServer\chatsocket.h
文件 2112 2018-04-13 19:11 ChatServer\chattcpserver.cpp
文件 513 2018-04-13 17:16 ChatServer\chattcpserver.h
文件 404 2018-04-13 20:30 ChatServer\main.cpp
文件 5427 2018-04-13 18:06 ChatServer\main.qml
文件 835 2018-04-13 12:43 ChatServer\mymessagedef.h
文件 12431 2018-04-13 20:30 fortuneclient\client.cpp
文件 3487 2018-04-12 21:02 fortuneclient\client.h
文件 235 2018-04-13 20:40 fortuneclient\fortuneclient.pro
文件 24016 2018-04-13 20:40 fortuneclient\fortuneclient.pro.user
文件 2771 2017-06-28 17:54 fortuneclient\main.cpp
目录 0 2018-04-13 20:36 ChatServer
目录 0 2018-04-13 20:40 fortuneclient
----------- --------- ---------- ----- ----
439801 16
相关资源
- PyQt4多类图像显示和编辑
- PyQt5:QtCharts 绘制折线图
- pyqt5:Qpainter绘制基础图形,鼠标拖动
- 基于Qt的数据管理系统
- SecrchLineEdit
- PasswordLineEdit
- TranslateLanguage
- 基于QT的登陆用户界面
- 基于QT的仪表盘
- pyqt实现虚拟小键盘
- Qt抓图软件
-
将xm
l内容显示Qt界面 - qt 设计菜单图标qt 设计菜单图标
- CameraHDR.rar
- qt ftp上传
- Qt窗体间传递数据的三种模型
- Qt 写的http 请求使用POST Json
- YUV420在qt5下显示
- qt 压缩解压缩文件和文件夹源码
- Quectel_EC2x&EG9x;&EM05;_MQTT_Application_Note
- 基于QT的聊天小程序实现注册登录,传
- Qt中国象棋项目 毕业设计
- qt的各个版本和qt-vs-addin各个版本的链
- qt用QCustomPlot实现鼠标实时回调xy轴数
- 桌面精灵桌面精灵桌面精灵
- 基于 QT5 百度语音API 图灵机器人API 的
- vert.x结合springboot开发mqtt服务,真实可
- QT实现视频监控开发画面分割
- qt usb通信
- 关于QT的数字时钟含闹钟
评论
共有 条评论