【QT】QHash键值对记录QTcpSocket客户端句柄

第一步:.h文件代码

#ifndef SOCKETMAP_H
#define SOCKETMAP_H
#include <QHash>
#include <QDebug>
#include <QTcpSocket>
#include <QException>

class SocketMap: public QObject
{
    Q_OBJECT
public:
    SocketMap();

public:
    static bool updateMap(QString key, QTcpSocket *m_socket);
    static QTcpSocket* getSocket(QString key);
    static QHash<QString, QTcpSocket*> getSocketMap();
    static bool removeSocket(QString key);
    static void clearSocket();
private:
    static QHash<QString, QTcpSocket*> socketMap;
};

#endif // SOCKETMAP_H

第二步:.cpp文件代码

#include "SocketMap.h"

SocketMap::SocketMap()
{
}
// 特别注意,静态成员需要赋值,否则编译错误
QHash<QString, QTcpSocket*> SocketMap::socketMap;
// 更新客户端套接字
bool SocketMap::updateMap(QString key, QTcpSocket *m_socket)
{
    socketMap.insert(key, m_socket);
    return true;
}

// 根据key值获取客户端socket
QTcpSocket* SocketMap::getSocket(QString key)
{
    if(socketMap.contains(key)) {
        return socketMap.value(key);
    }
    return NULL;
}
// 获取全部客户端
QHash<QString, QTcpSocket*> SocketMap::getSocketMap()
{
    return socketMap;
}
// 删除客户端
bool SocketMap::removeSocket(QString key)
{
    return socketMap.remove(key);
}
//清空客户端
void SocketMap::clearSocket()
{
    socketMap.clear();
}

第三步:其他类调用
先添加引用
#include "SocketMap.h"
直接调用静态函数
SocketMap::updateMap(str, m_socket);

posted @ 2024-05-30 14:17  qiutian-hao  阅读(44)  评论(0)    收藏  举报