-
大小: 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
評論
共有 條評論