WSAAsyncSelect消息編程

作爲客戶端,利用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;
	}
}






發佈了31 篇原創文章 · 獲贊 21 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章