标签:style blog color io os 使用 ar sp div
WSADATA wsaData; WORD wVersion = MAKEWORD(2,2); //需要打开版本为2.2的socket if ( WSAStartup(wVersion,&wsaData) != 0 ) { //打开失败… } //判断版本是否为2.2 if ( LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2 ) { WSACleanup(); } //其实代码都是一样的,只是变成了WSA***函数而已! SOCKET m_ClientSocket; m_ClientSocket = WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,0); if ( m_ServerSocket == INVALID_SOCKET ) { MessageBox("创建套接字失败..."); } //注册网络事件 //其实这个函数是关键,首先说一下,最后一个参数是FD_READ其实//还有如下的参数可以填写: //Event: FD_ACCEPT //Event: FD_ADDRESS_LIST_CHANGE //Event: FD_GROUP_QOS //Event: FD_OOB //Event: FD_QOS //Event: FD_READ //Event: FD_WRITE //这个函数叫注册消息,意思就是如果m_ClientSocket接收到了消息//的话就发送UM_RECVMESSAGE这个消息,为什么是接收到了消息//呢?因为注册的是FD_READ啊,如果注册了FD_ACCEPT那么就是有//人请求连接的时候就发送**消息 if( SOCKET_ERROR==WSAAsyncSelect(m_ClientSocket,m_hWnd,UM_RECVMESSAGE,FD_READ) ) { //注册失败. } //接收函数声明!但是此声明函数一定要写到//DECLARE_MESSAGE_MAP()之前,因为这个函数要作为消息路由//中的函数处理,说白了,这个函数的调用是通过消息映射来调用的 afx_msg LRESULT OnServerRecvMessage(WPARAM wParam,LPARAM lParam); DECLARE_MESSAGE_MAP() //接收函数定义!定义完了,上面也声明完了,但是怎么调用呢! LRESULT CServerDlg::OnServerRecvMessage(WPARAM wParam,LPARAM lParam) { switch ( LOWORD(lParam) ) { case FD_READ: } return 0; } //这个就是消息路由的建立了,一定要写到两个宏之间,呵呵,前几天刚看完侯俊杰的MFC,所以觉得这个特别精髓,我记得我在写代码的时候我居然写到了另外一个类中,还好我明白原理,2分钟就找到错误了,如果要是以前的话,估计没有几天找不到。哈哈 BEGIN_MESSAGE_MAP(XX子类,XX父类) ON_MESSAGE(UM_RECVMESSAGE,&XX子类:OnServerRecvMessage) END_MESSAGE_MAP()
标签:style blog color io os 使用 ar sp div
原文地址:http://www.cnblogs.com/habibah-chang/p/3995224.html