switch(iEvent) { case FD_ACCEPT: file://客户端连接请求 { OnAccept(); break; } case FD_CLOSE: file://客户端断开事件: { OnClose(pSock); break; } case FD_READ: file://网络数据包到达事件 { OnReceive(pSock); break; } case FD_WRITE: file://发送网络数据事件 { OnSend(pSock); break; } default: break; } } void OnAccept(SOCET pSock) file://响应客户端连接请求函数 { int len = sizeof(sockaddr); file://调用API函数,接受连接,并返回一个新套接字 file://还可以获得客户端的IP地址 SOCKET clientSocket = accept(serverSocket, (struct sockaddr*)&clientaddr, &len); file://为新的socket注册异步事件,注意没有Accept事件 if(WSAAsyncSelect(clientSocket ,m_hWnd, IP_EVENT, FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR) { MessageBox("注册异步事件失败!"); return; } file://自编函数,将此客户端的相关信息保存下来:套接字、 // IP地址、登陆时间 saveClientSocket(clientSocket,clientAddr,currentTimer); } void OnClose(SOCET pSock) { file://自编函数,结束与相应的客户端的通信,释放相应资源并做相应处理 endClientSocket(pSock); } void OnSend(SOCET pSock) { file://自编函数,在给客户端发数据时做一些预处理 handleOnSend(pSock); } void OnReceive(SOCET pSock) { recv(...); file://调用API函数,读出网络缓冲区中的数据包 file://自编函数,将此数据包和发出此数据的客户端 file://clientSocket封装成一条网络消息 buildNetMsg(...); file://自编函数,将此网络消息放入一个消息队列中,由工作线程去处理 saveNetMsg(...); SetEvent(...); file://用事件对象触发工作线程 希望看到更多更经典的开发技巧,请随时刷新《开发特区》栏目。 |
正在阅读:新手必学:windows网络编程经典入门新手必学:windows网络编程经典入门
2004-05-20 10:13
出处:太平洋电脑网
责任编辑:linjixiong
键盘也能翻页,试试“← →”键