线程函数:
DWORD WINAPI Client(LPVOID lpParam)
{
SOCKET sock= (SOCKET)lpParam;
CString ClientInfo;
ClientInfo.Format("IP:%s Port:%d", inet_ntoa(client.sin_addr), ntohs(client.sin_port)); char buf[1024];
int ret; while (1)
{
ret= recv(sock, buf, 1024, 0); if (ret==0 || ret==WSAENOTSOCK)
break;
if ( strcmp(buf, "Exit")==0)
break; send(sock, buf, 1024, 0);
} AfxMessageBox("exit");
return 1;
}
DWORD WINAPI Client(LPVOID lpParam)
{
SOCKET sock= (SOCKET)lpParam;
CString ClientInfo;
ClientInfo.Format("IP:%s Port:%d", inet_ntoa(client.sin_addr), ntohs(client.sin_port)); char buf[1024];
int ret; while (1)
{
ret= recv(sock, buf, 1024, 0); if (ret==0 || ret==WSAENOTSOCK)
break;
if ( strcmp(buf, "Exit")==0)
break; send(sock, buf, 1024, 0);
} AfxMessageBox("exit");
return 1;
}
每个线程中间有5-10套节字
当有客户连接的时候,就查找这些线程以及线程中间的套节字
如果哪个是空闲的,就接受该请求,如果都不空闲,就不接收请求就是线程通信用事件等待的方式来做
就是WaitForMultipleObjectsEx();
如果你的客户请求比较频繁,那么采用这种方式也有很好的效率的
而且使用的IO模型是简单的SELECT()模型
以后移植导LINUX/UNIX下很方便