CAsyncSocket类怎么接收自定义消息
CAsyncSocket类如何接收自定义消息?
CAsyncSocket类如何接收自定义消息?有没有办法实现?
------解决方案--------------------
我用的WSAAsyncSelect模型,没用MFC的类。
#define UM_SOCK WM_USER+100
拦截自定义消息后的处理
CAsyncSocket类如何接收自定义消息?有没有办法实现?
------解决方案--------------------
我用的WSAAsyncSelect模型,没用MFC的类。
#define UM_SOCK WM_USER+100
拦截自定义消息后的处理
- C/C++ code
LRESULT CWinSockEx1Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { int ret = 0; int err; CString strRecv; char strBuffer[255] = {'\0'}; SOCKET hClientSocket; if( message==UM_SOCK ) { SOCKET socketTemp = wParam; sockaddr_in addrMessage; WORD msg = LOWORD(lParam); int sizeAddrMsg = sizeof(sockaddr); switch(msg) { case FD_ACCEPT: hClientSocket = accept(m_hSocket,(sockaddr *)&addrMessage,&sizeAddrMsg); err = WSAGetLastError(); if( err!=0 ) { AfxMessageBox("服务端--接收客户端错误!!"); break; } ret = ::WSAAsyncSelect(hClientSocket,this->GetSafeHwnd(),UM_SOCK,FD_READ|FD_WRITE|FD_CLOSE); if( SOCKET_ERROR==ret ) { AfxMessageBox("服务端-设置客户端非阻塞错误!!"); break; } CommClient client; client.sock = hClientSocket; client.sin = addrMessage; vecColl.push_back(client); RefreshSocketInTree(); break; case FD_READ: ret = recv(socketTemp,strBuffer,sizeof(strBuffer)/sizeof(char),0); if( 0==ret || SOCKET_ERROR==ret ) { AfxMessageBox("服务端--接收数据错误!!"); break; } UpdateRecvTextBox(strBuffer); break; case FD_WRITE: GetDlgItem(IDC_Send)->EnableWindow(TRUE); SendOnLineClientList(); break; case FD_CLOSE: closesocket(socketTemp); EraseVectorElement(socketTemp); SendOnLineClientList(); break; } } return CDialog::WindowProc(message, wParam, lParam); }