扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
#define NETWORK_EVENT WM_USER+166 file://定义网络事件 SOCKET ServerSock; file://服务器端Socket |
class CSocketSeverDlg : CDialog { … public: SOCKET ClientSock[CLNT_MAX_NUM]; file://存储与客户端通信的Socket的数组 /*各种网络异步事件的处理函数*/ void OnClose(SOCKET CurSock); file://对端Socket断开 void OnSend(SOCKET CurSock); file://发送网络数据包 void OnReceive(SOCKET CurSock); file://网络数据包到达 void OnAccept(SOCKET CurSock); file://客户端连接请求 BOOL InitNetwork(); file://初始化网络函数 void OnNetEvent(WPARAM wParam, LPARAM lParam); file://异步事件回调函数 … }; |
ON_MESSAGE(NETWORK_EVENT,OnNetEvent) |
BOOL CSocketSeverDlg::InitNetwork() { WSADATA wsaData; file://初始化TCP协议 BOOL ret = WSAStartup(MAKEWORD(2,2), &wsaData); if(ret != 0) { MessageBox("初始化网络协议失败!"); return FALSE; } file://创建服务器端套接字 ServerSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(ServerSock == INVALID_SOCKET) { MessageBox("创建套接字失败!"); closesocket(ServerSock); WSACleanup(); return FALSE; } file://绑定到本地一个端口上 sockaddr_in localaddr; localaddr.sin_family = AF_INET; localaddr.sin_port = htons(8888); file://端口号不要与其他应用程序冲突 localaddr.sin_addr.s_addr = 0; if(bind(ServerSock ,(struct sockaddr*)&localaddr,sizeof(sockaddr)) = = SOCKET_ERROR) { MessageBox("绑定地址失败!"); closesocket(ServerSock); WSACleanup(); return FALSE; } file://将SeverSock设置为异步非阻塞模式,并为它注册各种网络异步事件,其 中 m_hWnd file://为应用程序的主对话框或主窗口的句柄 if(WSAAsyncSelect(ServerSock, m_hWnd, NETWORK_EVENT, FD_ACCEPT | FD_CLOSE | FD_READ | FD_WRITE) == SOCKET_ERROR) { MessageBox("注册网络异步事件失败!"); WSACleanup(); return FALSE; } listen(ServerSock, 5); file://设置侦听模式 return TRUE; } |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者