作爲客戶端,利用WSAAsyncSelect來進行收消息
//函數:
WSAAsyncSelect(m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT)
會給m_hWnd窗口發送消息。
在窗口的.h文件中添加,自定義消息
#define CLI_MESSAGE WM_USER + 101
綁定消息
ON_MESSAGE(CLI_MESSAGE,OnClientMessage)
接收處理函數
<pre name="code" class="cpp">LRESULT XXXXXXXXXX::OnClientMessage(WPARAM wParam, LPARAM lParam)
{
char msgHeader[4];
char s[SOCKET_RECVBUFSIZE];
int totolLen = 0;
int recvLen = 0;
int len;
switch(lParam)
{
case FD_CONNECT:
len=GetLastError();
if(len!=0)
{
TRACE("Error in Connecting");
}
else
{
TRACE("Having connected to server!\n");
}
return 0;
case FD_READ:
//在recv收取時,需要先關閉套接字,否則會出現很多空的FD_READ
WSAAsyncSelect(m_client.m_hSocket,m_hWnd,CLI_MESSAGE,0);
len = recvLen = 0;
do
{
if ((len = recv(m_client.m_hSocket,s+recvLen,totolLen - recvLen, 0)) == SOCKET_ERROR)
{
if (WSAEWOULDBLOCK == WSAGetLastError())
{
continue;
}
else
{
break;
}
}
recvLen += len;
} while (totolLen > (recvLen));
WSAAsyncSelect(m_client.m_hSocket,m_hWnd,CLI_MESSAGE,FD_READ|FD_WRITE|FD_CLOSE|FD_CONNECT);
return 0;
case FD_WRITE:
return 0;
case FD_CLOSE:
return 0;
default:
return 0;
}
}