WsaAsyncSelect编程模型
2014-10-14 22:39
246 查看
在我们的处理函数中可以如下监听客户端的连接:
SOCKET listenSock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ); sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_port = htons(7788); sin.sin_addr.S_un.S_addr = INADDR_ANY; int nRet = bind( listenSock, (sockaddr*)&sin, (int)(sizeof(sin))); if ( nRet == SOCKET_ERROR ) { DWORD errCode = GetLastError(); return; } listen( listenSock, 5); int clientNum = 0; sockaddr_in clientAddr; int nameLen = sizeof( clientAddr ); while( clientNum < FD_SETSIZE ) { SOCKET clientSock = accept( listenSock, (sockaddr*)&clientAddr, &nameLen ); //hWnd为接收系统发送的消息的窗口句柄 WSAAsyncSelect( clientSock, hWnd, UM_SOCK_ASYNCRECVMSG, FD_READ | FD_CLOSE ); clientNum++; }
接下来,我们需要在我们的窗口添加对UM_SOCK_ASYNCRECVMSG消息的处理函数,在该函数中真正接收客户端发送过来的数据,在这个消息处理函数中的wparam参数表示的是客户端套接字,lparam参数表示的是发生的网络事件如:
SOCKET clientSock = (SOCKET)wParam;if ( WSAGETSELECTERROR( lParam ) ){closesocket( clientSock );return;}switch ( WSAGETSELECTEVENT( lParam ) ){case FD_READ:{char recvBuffer[1024] = {'\0'};int nRet = recv( clientSock, recvBuffer, 1024, 0 );if ( nRet > 0 ){szRecvMsg.AppendFormat(_T("Client %d Say:%s\r\n"), clientSock, recvBuffer );}else{//client disconnectszRecvMsg.AppendFormat(_T("Client %d Disconnect!\r\n"), clientSock );}}break;case FD_CLOSE:{closesocket( clientSock );szRecvMsg.AppendFormat(_T("Client %d Disconnect!\r\n"), clientSock );}break;}可以看到WsaAsyncSelect模型是非常简单的模型,它解决了普通select模型的问题,但是它最大的缺点就是它只能用在windows程序上,因为它需要一个接收系统消息的窗口句柄。
相关文章推荐
- [转载]使用 WSAAsyncSelect 的 Winsock 编程模型
- WSAAsyncSelect 模型 - 还是接着以前的socket、 部分继续研究, 近期将精力 放在各种模型上面,比较缺点,实现出来
- Winsock I/O模型之WSAAsyncSelect
- Socket I/O模型之异步选择(WSAAsyncSelect)
- Windows Socket编程TCP范例之三(WSAAsyncSelect)
- WSAAsyncSelect异步套接字模型Client——》Server
- WSAEventSelect编程模型实现
- 二、异步选择模型(WSAAsyncSelect)
- Winsock提供了一个很有用的异步I/O模型之WSAAsyncSelect
- Winsock异步模型之(事件通知模型 WSAAsyncSelect)
- WSAEventSelect模型编程 详解
- Windows Socket I/O模型之 WSAAsyncSelect模式
- WSAAsyncSelect注册I/O模型后connect函数总是返回-1
- TCP,UDP IO模型(一)WSAAsyncSelect 异步选择
- Winsock异步事件通知模型WSAAsyncSelect
- Winsock I/O模型之WSAAsyncSelect
- Socket I/O模型之异步选择(WSAAsyncSelect)(转)
- 【网络编程】之八、异步选择WSAAsyncSelect
- 【网络编程】之八、异步选择WSAAsyncSelect
- WSAEventselect编程模型使用步骤总结