TCP被动连接方实现,一般就是服务端,支持同时处理多连接的请求和消息收发,每个连接分配一个数据收发线程,可以优化成线程池处理连接池的数据收发流程,已避免线程的过度使用:
#include <iostream>
#include <vector>
#include <Windows.h>
#include <map>
#include <winsock.h>
//#include <thread>
//#include <WinSock2.h>
//#include <MSWSock.h>
#pragma comment(lib, "Ws2_32.lib")
//#pragma comment(lib, "Mswsock.lib")
using namespace std;
map<SOCKET, HANDLE> s_socketThread;
void InitWs2()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
return;
}
if (LOBYTE(wsaData.wVersion) != 2 ||
HIBYTE(wsaData.wVersion) != 2) {
WSACleanup();
return;
}
}
void UninitWs32()
{
WSACleanup();
}
DWORD WINAPI DoShockRecvSend(LPVOID param)
{
SOCKET so