55 lines
1002 B
C++
55 lines
1002 B
C++
#pragma once
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <Windows.h>
|
|
#include <WinSock2.h>
|
|
#include <mswsock.h>
|
|
#include <map>
|
|
#include <string>
|
|
#include <list>
|
|
#include <mutex>
|
|
|
|
#pragma comment(lib, "ws2_32.lib")
|
|
#pragma comment(lib, "Mswsock.lib")
|
|
|
|
class SocketS
|
|
{
|
|
public:
|
|
struct msgInfo
|
|
{
|
|
int index;
|
|
int len = 0;
|
|
char buf[1025] = { 0 };
|
|
};
|
|
|
|
private:
|
|
struct clienInfo
|
|
{
|
|
SOCKET c_Sock;
|
|
OVERLAPPED c_Olp;
|
|
char c_strRecv[1024];
|
|
};
|
|
|
|
BOOL g_flag = TRUE; //状态
|
|
HANDLE hPort = NULL; //完成端口句柄
|
|
HANDLE* pThread = NULL; //线程句柄
|
|
int g_count = 0; //当前客户端ID
|
|
std::map<int, clienInfo>ClienMap; //所有客户端
|
|
|
|
std::mutex msgLock; //消息锁
|
|
std::list<msgInfo*>msgList; //存放所有消息
|
|
static DWORD WINAPI ThreadProc(LPVOID lpParameter); //工作者线程
|
|
|
|
public:
|
|
SocketS();
|
|
int PostAccept(void);
|
|
int PostRecv(int index);
|
|
int PostSend(int index, const char* buf, int len);
|
|
BOOL Creat(int Prot);
|
|
void Clear();
|
|
msgInfo* GetMsg();
|
|
};
|
|
|