2024-10-17 15:56:43 +08:00
|
|
|
|
#pragma once
|
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
|
|
|
|
|
|
#include <WinSock2.h>
|
|
|
|
|
#include <mswsock.h>
|
|
|
|
|
#include <map>
|
|
|
|
|
#include <mutex>
|
2024-10-23 23:58:57 +08:00
|
|
|
|
#include <functional>
|
2024-11-23 13:47:53 +08:00
|
|
|
|
#include "md5.h"
|
|
|
|
|
#include "AES.h"
|
|
|
|
|
|
2024-10-17 15:56:43 +08:00
|
|
|
|
|
|
|
|
|
#pragma comment(lib, "ws2_32.lib")
|
|
|
|
|
#pragma comment(lib, "Mswsock.lib")
|
|
|
|
|
|
2024-10-23 23:58:57 +08:00
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
#pragma warning(disable:4996)
|
|
|
|
|
|
2024-10-17 15:56:43 +08:00
|
|
|
|
class SocketS
|
|
|
|
|
{
|
|
|
|
|
private:
|
2024-10-23 23:58:57 +08:00
|
|
|
|
|
|
|
|
|
struct MsgHead
|
|
|
|
|
{
|
2024-11-23 13:47:53 +08:00
|
|
|
|
int isStr = 0;
|
2024-10-23 23:58:57 +08:00
|
|
|
|
int bufLen = 0;
|
|
|
|
|
time_t tm = 0;
|
|
|
|
|
char token[34] = { 0 };
|
2024-10-17 15:56:43 +08:00
|
|
|
|
};
|
|
|
|
|
|
2024-11-23 13:47:53 +08:00
|
|
|
|
struct clienInfo
|
|
|
|
|
{
|
|
|
|
|
SOCKET c_Sock;
|
|
|
|
|
OVERLAPPED c_Olp;
|
|
|
|
|
int Rbuflen = 0;
|
|
|
|
|
MsgHead h;
|
|
|
|
|
char buff[10240] = { 0 };
|
|
|
|
|
};
|
2024-10-23 23:58:57 +08:00
|
|
|
|
|
2024-11-23 13:47:53 +08:00
|
|
|
|
BOOL g_flag = 0; //״̬
|
|
|
|
|
HANDLE hPort = NULL; //<2F><><EFBFBD>ɶ˿ھ<CBBF><DABE><EFBFBD>
|
|
|
|
|
int g_count = 1; //<2F><>ǰ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>ID
|
|
|
|
|
map<int, clienInfo>ClienMap;//<2F><><EFBFBD>пͻ<D0BF><CDBB><EFBFBD>
|
|
|
|
|
std::thread *ListenClien; //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
|
|
|
|
int Count = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̶߳<DFB3><CCB6>ٸ<EFBFBD>
|
|
|
|
|
mutex Lock; //<2F>߳<EFBFBD><DFB3><EFBFBD>
|
2024-11-24 16:30:28 +08:00
|
|
|
|
int m_mode; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
2024-11-23 13:47:53 +08:00
|
|
|
|
function<VOID(int,char*,int)> Rfunc = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĻص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
function<VOID(int)> Cfunc = NULL; //<2F>ͻ<EFBFBD><CDBB>˹رյĻص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
2024-10-17 15:56:43 +08:00
|
|
|
|
|
|
|
|
|
static DWORD WINAPI ThreadProc(LPVOID lpParameter); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>
|
2024-11-23 13:47:53 +08:00
|
|
|
|
int PostSend(int index, const char* buf, int len); //<2F><>ָ<EFBFBD><D6B8><EFBFBD>ͻ<EFBFBD><CDBB>˷<EFBFBD><CBB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
VOID PostRecv(int index); //Ͷ<><CDB6><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
BOOL CheckHead(MsgHead* h); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣͷ
|
|
|
|
|
VOID Listens(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
2024-10-17 15:56:43 +08:00
|
|
|
|
|
2024-10-23 23:58:57 +08:00
|
|
|
|
public:
|
2024-11-24 16:30:28 +08:00
|
|
|
|
SocketS(int mode = 0); //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
~SocketS(); //<2F><><EFBFBD><EFBFBD>
|
2024-11-23 13:47:53 +08:00
|
|
|
|
BOOL Creat(int Prot); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void Close(); //<2F>رշ<D8B1><D5B7><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
VOID SetRecvFunc(function<VOID(int, char*, int)> fun); //<2F><><EFBFBD>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
VOID SetCloseFunc(function<VOID(int)> fun); //<2F><><EFBFBD>ùرտͻ<D5BF><CDBB>˵Ļص<C4BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
VOID GetClienName(int index, string& IP, int& Prot); //<2F><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>IP<49>Ͷ˿<CDB6>
|
|
|
|
|
int SendData(int index, const char* buf, int len, int isStr = 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|
|
|
|
BOOL SendStr(int index, string str); //<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|
|
|
|
VOID CloseClien(int index); //<2F>ر<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>
|
2024-10-23 23:58:57 +08:00
|
|
|
|
|
2024-10-17 15:56:43 +08:00
|
|
|
|
};
|
|
|
|
|
|