因为是阻塞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也一样。
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也一样。
没应答,一直在连接?
{
send(m_sockClient,"hao",10,0);
Sleep(20); //这里最好做个小小的延时处理
};
{
send(m_sockClient,"hao",10,0);
};一直在死循环,占用CPU不放啊开启线程的时候是要注意这类问题
主要是为了放弃时间片
可以sleep(0);