因为是阻塞SOCKET,所以建立一个线程来保持CONNECT:
UINT ClientThread(LPVOID any)
{ WSADATA wsaData;
int err;

err = WSAStartup(0x101,&wsaData);
if (err  != 0)
{
::MessageBox(NULL,_T("WSAStartup Error"),_T("WSAStartup Error"),MB_OK);
return 0;
}
if (LOBYTE (wsaData.wVersion)!= 1 || HIBYTE (wsaData.wVersion)!= 1 )
{
::MessageBox(NULL,_T("WSAversion error"),_T("WSAStartup Error"),MB_OK);
WSACleanup();
return 0;
}
SOCKET m_sockClient = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6122);
connect(m_sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
while(1)
{
send(m_sockClient,"hao",10,0);
};
closesocket(m_sockClient);
WSACleanup();
}在这里:
BOOL CMFTcpClientTestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
AfxBeginThread(ClientThread,NULL);
启动线程。怎么一运行,把CPU全吃了?去掉那个SEND也一样。

解决方案 »

  1.   

    吃CPU和耗内存不是一码事。
    没应答,一直在连接?
      

  2.   

    while(1)
    {
    send(m_sockClient,"hao",10,0);
    Sleep(20); //这里最好做个小小的延时处理
    }; 
      

  3.   

    哦,呵呵,随口而出的“吃CPU”,改为“耗内存”。
      

  4.   

    嘿,加个SLEEP果然把内存占用量降了很多,解释一下吧
      

  5.   

    你的代码在那里死循环,别的进程得不到cpu时间了
      

  6.   

    当然了 你用了一个死循环啊  想减少cpu使用率 考虑用sleep(200) 吧 但是连接太多的话 会降低效率的
      

  7.   

    大约要保持连接1500台客户端每个线程里SLEEP多久合适
      

  8.   

    while(1) 

    send(m_sockClient,"hao",10,0); 
    };一直在死循环,占用CPU不放啊开启线程的时候是要注意这类问题
      

  9.   

    是的,这里如果不加延迟,这个线程会一直占用着CPU处理,加个小小的Sleep让cpu能做其他线程的事情。
      

  10.   

    看你的需求来sleep
    主要是为了放弃时间片
    可以sleep(0);