现在的位置: 首页 > 综合 > 正文

WSAAsyncSelect 模型 – 还是接着以前的socket、 部分继续研究, 近期将精力 放在各种模型上面,比较缺点,实现出来

2013年10月16日 ⁄ 综合 ⁄ 共 798字 ⁄ 字号 评论关闭

  WSAAsyncSelect 模型允许应用程序以windows消息的形式接受网络事件通知

这个模型是为了适应windows的 消息驱动环境设置的, 对性能要求不高的网络

应用程序采用这个模型,MFC的CSoket采用这个模型

 

WSAAsyncSelect 函数会自动把函数设置为非阻塞模式,并且为套接字绑定一个窗口句柄

当有网络时间发生时,向这个窗口发消息

int WSAAsyncSelect(

SOCKET s, // 需要设置的套接字句柄

 

HWND hWnd, // 指定一个窗口句柄

// 套接字的通知消息将被发送到与其对应的窗口过程中

 

u_int wMsg, // 网络事件

// 可以使用WM_USER以上的数值中任意选择一个做为ID

 

long IEvent // 指定哪些通知码需要发送

);

最后一个参数IEvent 指定要发送的通知码

FD_READ 接收到对方发过来的数据包,表明这时可以去读套接字了

FD_WRITE 数据缓冲区满后再次变空时,WinSock接口通过该 通知码通知应用程序

表示可以发送数据了(短时间内发送数据过多,便会造成数据缓冲区变满)

FD_ACCEPT 监听中的套接字检测到有链接进入

FD_CONNECT - 如果用套接字连接对方的主机。当连接动作完成以后会接收到这个通知

FD_CLOSE   - 检测到套接字对应的连接被关闭

 

::WSAAsyncSelect(sListen, hWnd, WM_SOCKET, FD_ACCEPT|FD_CLOSE); //WM_SOCKET 自定义消息

 

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

wPARAM - 发生网络事件的套接字句柄

lParam - 参数的低字位指定了发生的网络事件,高字节包含了任何可能出现的错误代码

 

WSAGETSELECTERROR WSAGETSELECTEVENT 将这些信息给出来

【上篇】
【下篇】

抱歉!评论已关闭.