sock通信 可一对多
server
int main()
{
WSAData wsadata;
WSAStartup(0x1010, &wsadata);
//初始化套接字
SOCKET hSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (hSock == INVALID_SOCKET)
{
WSACleanup();
return hSock;
}
//绑定
SOCKADDR_IN addr_in = { 0 };
addr_in.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(3016);
int nBindRes = bind(hSock, (SOCKADDR *)(&addr_in), sizeof(SOCKADDR));
if (nBindRes != 0)
{
WSACleanup();
return nBindRes;
}
//监听
int nlres = listen(hSock, 1);
//接收连接
int nLen = sizeof(SOCKADDR);
while (1) {
SOCKET * psc = (SOCKET *)malloc(sizeof(SOCKET));
*psc = accept(hSock, 0, 0);
//printf("一个客户端已经连接到本机的3016端口,SOCKET是 : %u \n", *psc);
lizf++;
pubg[lizf] = *psc;
// 如果不需要收客户端信息 这里可以屏蔽 CreateThread(NULL,
// 0,
// &ThreadProcServerConmunicate,
// psc,
// 0,
// NULL
);
}
while (1)
{
DWORD code;
GetExitCodeThread(g_hRecv, &code);
if (STILL_ACTIVE != code)
{
break;
}
//发送
//printf("发送内容:");
char s_talk_to[128] = { 0 };
//MyGets(s_talk_to);
//puts(GetTime().c_str());
send(hTalk, s_talk_to, strlen(s_talk_to), 0);
}
if (hTalk != INVALID_SOCKET)
{
closesocket(hTalk);
hTalk = INVALID_SOCKET;
}
if (hSock != INVALID_SOCKET)
{
closesocket(hSock);
hSock = INVALID_SOCKET;
}
WSACleanup();
return 0;
}