-
大小: 14KB文件类型: .rar金币: 2下载: 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
相关资源
- mgn-mqt82.exe
- Trojan-Qt5-Windows-0.0.4.rar
- 酒店管理系统基于Qt Creator5)
- vtk QT做的三维地质可视化系统2of2
- Qt局域网聊天软件
- Qt Creator opengl实现四元数鼠标控制轨迹
- QT局域网聊天系统(基于QT5.修改过)
- qt-电子点菜系统
- C 餐厅叫号系统(QT平)
- QT 实现文件下载
- qt图像处理
- 代码客:G-TcpServer(IOCP) 1.0 正式版及
- QT,JPEG解码源代码(已完成)
- Qt 播放音频文件
- Qt 读取16进制的data文件
- MQTT+串口(usart)透传
- 易语言QQTEA算法源码
- VC工程转Qt工程文件的工具
- MQTT推送Demo
- 基于Linux、QT的视频监控系统的设计与
- Qt 百度地图 定位
- QT酷炫界面开发指南《QmlBook》
- Ubuntu下操作Excel,qt代码
- Qt图片浏览器 --基于Qt的Graphics View f
- qtnribbon2破解
- Qt软件开发 完整项目代码
- MQTT_3.1protocol_Specific中文版
- 在QT中使用RTP进行视频的采集和传输
- Mini6410 Qt4和Qtopia编程开发指南
- Qt实现Code39条形码
评论
共有 条评论