线程函数:
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;
}

解决方案 »

  1.   

    我建议在一开始你就启动一系列线程比如说20个
    每个线程中间有5-10套节字
    当有客户连接的时候,就查找这些线程以及线程中间的套节字
    如果哪个是空闲的,就接受该请求,如果都不空闲,就不接收请求就是线程通信用事件等待的方式来做
    就是WaitForMultipleObjectsEx();
    如果你的客户请求比较频繁,那么采用这种方式也有很好的效率的
    而且使用的IO模型是简单的SELECT()模型
    以后移植导LINUX/UNIX下很方便