CSTest/网络服务端/SocketS.h
2024-10-17 15:56:43 +08:00

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();
};