Files
Netralib/include/Netra.hpp

195 lines
7.3 KiB
C++
Raw Normal View History

2025-07-31 14:47:51 +08:00
#pragma once
#include "QCL_Include.hpp"
namespace QCL
{
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
* @class TcpServer
* @brief 线TCP服务器类
*
* 使线
* 线
* 线Socket句柄
*/
class TcpServer
{
public:
/**
* @brief
* @param port
*/
TcpServer(int port);
/**
* @brief stop()
*/
~TcpServer();
/**
* @brief socket线
* @return truefalse
*/
bool start();
/**
* @brief 线退
*/
void stop();
/**
* @brief
* @param clientSock Socket描述符
* @param message
*/
void sendToClient(int clientSock, const std::string &message);
/**
* @brief
* @param clientSock Socket描述符
2025-08-04 15:01:31 +08:00
* @param flag:false ,true
*/
2025-08-11 11:17:32 +08:00
char *receiveFromClient(int clientSock, bool flag = true);
2025-08-04 15:01:31 +08:00
/**
* @brief IP和端口
* @param clientSock Socket描述符
2025-07-31 14:47:51 +08:00
*/
2025-08-04 15:01:31 +08:00
char *getClientIPAndPort(int clientSock);
2025-07-31 14:47:51 +08:00
/**
* @brief Socket的副本
* @return Socket的vector线
*/
std::vector<int> getClientSockets();
private:
/**
* @brief 线
*/
void acceptClients();
private:
int serverSock_; ///< 服务器监听Socket描述符
int port_; ///< 服务器监听端口
std::atomic<bool> running_; ///< 服务器运行状态标志(线程安全)
std::vector<std::thread> clientThreads_; ///< 用于处理每个客户端的线程集合
std::thread acceptThread_; ///< 负责监听新连接的线程
std::mutex clientsMutex_; ///< 保护clientSockets_的互斥锁
std::vector<int> clientSockets_; ///< 当前所有连接的客户端Socket集合
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2025-08-11 11:17:32 +08:00
/**
* @brief 线
*
*
* -
* -
* -
* -
* -
*
*
* -
* -
* -
* - 使 std::mutex 线
*/
class WriteFile
{
public:
/**
* @brief
* @param filePath
*/
explicit WriteFile(const std::string &filePath);
/**
* @brief 线
* @param content
* @return true
* @return false
*/
bool overwriteText(const std::string &content);
/**
* @brief 线
* @param content
* @return true
* @return false
*/
bool appendText(const std::string &content);
/**
* @brief 线
*
*
*
*
* @param content
* @param position
* @return true
* @return false
*/
bool writeOriginal(const std::string &content, std::streampos position = 0);
/**
* @brief 线
* @param data
* @return true
* @return false
*/
bool overwriteBinary(const std::vector<char> &data);
2025-07-31 14:47:51 +08:00
2025-08-11 11:17:32 +08:00
/**
* @brief 线
* @param data
* @return true
* @return false
*/
bool appendBinary(const std::vector<char> &data);
/**
* @brief
*
* "ABC***--***XYZ" "***--***"
* 11"ABC"=3 + "***--***"=8
*
* @param pattern
* @return long -1
*/
long countBytesBeforePattern(const std::string &pattern);
private:
std::string filePath_; ///< 文件路径
std::mutex writeMutex_; ///< 线程锁,保证多线程写入安全
/**
* @brief 线
* @param content
* @param mode /
* @return true
* @return false
*/
bool writeToFile(const std::string &content, std::ios::openmode mode);
/**
* @brief 线
* @param data
* @param mode /
* @return true
* @return false
*/
bool writeBinary(const std::vector<char> &data, std::ios::openmode mode);
};
// 读文件操作
class ReadFile
{
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2025-07-31 14:47:51 +08:00
// 屏蔽所有信号
void blockAllSignals();
}