这次闲话不说,直接上货
自定义消息,用来接收异步消息
#define WM_SOCKET WM_USER+1
定义服务端监听SOCKET
SOCKET m_servSock;
声明初始化服务端监听SOCKET的方法
BOOL InitNetwork();
定义初始化服务端监听SOCKET的方法
BOOL CpassiveSelectDlg::InitNetwork(){
WSADATA m_wsaData;
WSAStartup(MAKEWORD(2,2),&m_wsaData);
m_servSock=socket(AF_INET,SOCK_STREAM,0);
sockaddr_in m_servAddr;
memset(&m_servAddr,0,sizeof(m_servAddr));
m_servAddr.sin_family=AF_INET;
m_servAddr.sin_addr.s_addr=htonl(INADDR_ANY);
m_servAddr.sin_port=htons(atoi("8888"));
bind(m_servSock,(SOCKADDR*)&m_servAddr,sizeof(m_servAddr));
listen(m_servSock,5);
WSAAsyncSelect(m_servSock,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ);
return TRUE;
}
主要是
WSAAsyncSelect(m_servSock,this->m_hWnd,WM_SOCKET,FD_ACCEPT|FD_READ);
这句,为socket注册异步IO事件。
ON_MESSAGE(NETWORK_EVENT,“回调函数”)
然后在回调函数中根据事件类型做出各种操作。
主要操作有很多,都是干什么的,自己自行理解。
回调函数原型如下:
void className::FName(WPARAM wParam, LPARAM lParam){
//调用Winsock API函数,得到网络事件类型
int iEvent = WSAGETSELECTEVENT(lParam);
//调用Winsock API函数,得到发生此事件的客户端套接字
SOCKET CurSock= (SOCKET)wParam;
switch(iEvent){
case FD_ACCEPT: //客户端连接请求事件
OnAccept(CurSock);
break;
case FD_CLOSE: //客户端断开事件:
OnClose(CurSock);
break;
case FD_READ: //网络数据包到达事件
OnReceive(CurSock);
break;
case FD_WRITE: //发送网络数据事件
OnSend(CurSock);
break;
default: break;
}
}
详细的就不写了,这里主要是为自己记录一下,如果有问题的到下方群中,我们再交流学习。
(以上如有不解,请到群内讨论。如果对您有所帮助话,那就点个赞吧,嘻嘻~~)
安利一个特别热心的编程乐园群:624108656