client
This commit is contained in:
@@ -78,6 +78,83 @@ namespace QCL
|
||||
std::mutex clientsMutex_; ///< 保护clientSockets_的互斥锁
|
||||
std::vector<int> clientSockets_; ///< 当前所有连接的客户端Socket集合
|
||||
};
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/**
|
||||
* @class TcpClient
|
||||
* @brief 简单的TCP客户端类,支持自动连接、消息收发及断线重连
|
||||
*
|
||||
* 该类用于连接指定服务器IP与端口,
|
||||
* 支持发送与接收字符串消息,
|
||||
* 并提供自动重连与线程安全的消息接收。
|
||||
*/
|
||||
class TcpClient
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* @brief 构造函数,指定服务器IP与端口
|
||||
* @param serverIP 服务器IP地址
|
||||
* @param serverPort 服务器端口号
|
||||
*/
|
||||
TcpClient(const std::string &serverIP, int serverPort);
|
||||
|
||||
/**
|
||||
* @brief 析构函数,自动断开连接并清理资源
|
||||
*/
|
||||
~TcpClient();
|
||||
|
||||
/**
|
||||
* @brief 连接服务器
|
||||
* @return 连接成功返回true,失败返回false
|
||||
*/
|
||||
bool connectToServer();
|
||||
|
||||
/**
|
||||
* @brief 断开与服务器的连接
|
||||
*/
|
||||
void disconnect();
|
||||
|
||||
/**
|
||||
* @brief 向服务器发送字符串消息
|
||||
* @param message 要发送的字符串
|
||||
*/
|
||||
void sendToServer(const std::string &message);
|
||||
|
||||
/**
|
||||
* @brief 从服务器接收数据(单次调用)
|
||||
* @param flag false: 非阻塞模式, true: 阻塞模式
|
||||
* @return 收到的数据字符串(若无数据返回空字符串)
|
||||
*/
|
||||
std::string receiveFromServer(bool flag = true);
|
||||
|
||||
/**
|
||||
* @brief 获取当前连接的服务器IP和端口
|
||||
* @return 字符串形式的 "IP:Port"
|
||||
*/
|
||||
std::string getServerIPAndPort() const;
|
||||
|
||||
/**
|
||||
* @brief 判断客户端当前是否已连接
|
||||
* @return 已连接返回true,否则返回false
|
||||
*/
|
||||
bool isConnected() const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* @brief 尝试自动重连服务器(可选)
|
||||
* @param retryIntervalMs 重连间隔,单位毫秒
|
||||
*/
|
||||
void reconnectLoop(int retryIntervalMs = 3000);
|
||||
|
||||
private:
|
||||
int clientSock_; ///< 客户端Socket描述符
|
||||
std::string serverIP_; ///< 服务器IP地址
|
||||
int serverPort_; ///< 服务器端口号
|
||||
std::atomic<bool> connected_; ///< 连接状态标志(线程安全)
|
||||
std::atomic<bool> running_; ///< 是否保持运行(用于自动重连)
|
||||
std::thread reconnectThread_; ///< 自动重连线程(可选)
|
||||
mutable std::mutex socketMutex_; ///< 保护socket的互斥锁
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/**
|
||||
* @brief 文件写入工具类(线程安全)
|
||||
|
Reference in New Issue
Block a user