#pragma once #define WIN32_LEAN_AND_MEAN #include #include #include #include #include #include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") #pragma comment(lib, "Mswsock.lib") using namespace std; #pragma warning(disable:4996) class SocketS { public: private: struct clienInfo { SOCKET c_Sock; OVERLAPPED c_Olp; int buflen = 0; char buf[10240] = { 0 }; char c_strRecv[1024]; mutex msgLock; //消息锁 mutex sendLock; //消息锁 }; struct MsgHead { int MyIndex = 0; int bufLen = 0; time_t tm = 0; char token[34] = { 0 }; }; BOOL g_flag = TRUE; //状态 HANDLE hPort = NULL; //完成端口句柄 HANDLE* pThread = NULL; //线程句柄 int g_count = 0; //当前客户端ID mapClienMap; //所有客户端 function Rfunc = NULL; function Cfunc = NULL; static DWORD WINAPI ThreadProc(LPVOID lpParameter); //工作者线程 int PostAccept(void); int PostRecv(int index); int PostSend(int index, const char* buf, int len); char* RecvBuff(int index, char* buf, int& len); public: SocketS(); BOOL Creat(int Prot); void Close(); VOID SetRecvFunc(function fun); VOID SetCloseFunc(function fun); VOID GetClienName(int index, string& IP, int& Prot); int Send(int index, const char* buf, int len); VOID CloseClien(int index); };