关于socket编程,cpu使用率100%的问题
最近学socket编程,想做个简单的程序,就是一个服务器三个客户端,但是accept连接第二个客户端时就会cpu100%,程序如下,琢磨一天了也没想明白哪里错了
VOID SocketSrvThread (PVOID pvoid)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return;
}
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return;
}
SOCKET socketSrv=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);
//绑定套接字
bind(socketSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
//将套接字设置为监听模式,准备接受客户请求
listen( socketSrv, 20 );
while (true)
{
SOCKADDR_IN addrClient[3];
int len=sizeof(SOCKADDR);
int clientNmb=0;
SOCKET socketNmb[CLIENT_NUMBER];
char recvBuf[CLIENT_NUMBER];
while (clientNmb<CLIENT_NUMBER)
{
socketNmb[clientNmb]=accept(socketSrv,(SOCKADDR*)(addrClient+clientNmb),&len);
//////////////////////////////////////////////////////////////////////
//while循环第二次执行accept,就是连接第二个客户端时就会cpu100%///////
///////////////////////////////////////////////////////////////////////
// recv(socketNmb[clientNmb],recvBuf+clientNmb,1,0);
clientNmb++;
}
for (int i=0;i<CLIENT_NUMBER;i++)
{
recv(socketNmb[i],recvBuf+i,1,0);
}
int iTemp=0;
for (int i1=0;i1<CLIENT_NUMBER;i1++)
{
iTemp+=recvBuf[i1];
}
if (iTemp!=150)
{
MessageBox(GetActiveWindow(),"error","error info",MB_OKCANCEL);
}
char sendBuf='1';
for (int i2=0;i2<CLIENT_NUMBER;i2++)
{
send(socketNmb[i2],&sendBuf,1,0);
}
for (int i3=0;i3<CLIENT_NUMBER;i3++)
{
closesocket(socketNmb[i3]);
}
}
}
void CSocketSrvDlg::OnBeginSrv()
{
// TODO: Add your control notification handler code here
_beginthread(SocketSrvThread,0,NULL);
}