关于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);
}
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);
}
...全文
相关推荐
解决LoadRunner回放Socket脚本时CPU 100%,LR崩溃,报“mmdrv.exe”错误的问题
然而,在实际使用中,可能会遇到各种问题,其中之一就是标题中提到的“LoadRunner回放Socket脚本时CPU 100%,LR崩溃,报“mmdrv.exe”错误”。
解决PostgreSQL服务启动后占用100% CPU卡死的问题
然而,当PostgreSQL服务启动后占用CPU达到100%,甚至导致系统卡死,这显然是一个严重的问题。本文将探讨这个问题的可能原因及解决方案。
linux php-cgi.exe占用cpu 100%的一次排障之旅
在本文中,我们将探讨一个常见的问题,即Linux环境下PHP-CGI进程占用CPU达到100%的情况,以及如何进行故障排查。这个问题通常会导致服务器性能急剧下降,影响网站的正常运行。
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
在描述的问题中,服务器的CPU负载增加,`php-cgi`进程的CPU使用率达到100%,通常是由`file_get_contents()`长时间等待远程响应而引起的。
cpu-usage-node-socketio:使用NodeJs和Socket.io构建实时服务器以监视CPU性能
{ width: 200px; height: 20px; background-color: #f0f0f0; } #cpu-bar { width: 0%; height: 100%; background-color


其它技术问题
