开发学院软件开发VC WinSock学习笔记(2) 阅读

WinSock学习笔记(2)

 2010-05-25 20:36:41 来源:WEB开发网   
核心提示:◆I/O操作函数:主要用于获取与套接字相关的操作参数,intioctlsocket(SOCKET s, long cmd, u_long FAR * argp );s为I/O操作的套接字,WinSock学习笔记(2)(4),cmd为对套接字的操作命令,argp为命令所带参数的指针,wMsg.wParam参数标识了套接字

◆I/O操作函数:主要用于获取与套接字相关的操作参数。

int ioctlsocket(SOCKET s, long cmd, u_long FAR * argp );

s为I/O操作的套接字。

cmd为对套接字的操作命令。

argp为命令所带参数的指针。

常见的命令:

//确定套接字自动读入的数据量
#define FIONREAD _IOR(''''f'''', 127, u_long) /* get # bytes to read */
//允许或禁止套接字的非阻塞模式,允许为非0,禁止为0
#define FIONBIO _IOW(''''f'''', 126, u_long) /* set/clear non-blocking i/o */
//确定是否所有带外数据都已被读入
#define SIOCATMARK _IOR(''''s'''', 7, u_long) /* at oob mark? */

3、WSAAsynSelect模型:

WSAAsynSelect模型也是一个常用的异步I/O模型。应用程序可以在一个套接字上接收以

WINDOWS消息为基础的网络事件通知。该模型的实现方法是通过调用WSAAsynSelect函

数 自动将套接字设置为非阻塞模式,并向WINDOWS注册一个或多个网络时间,并提供一

个通知时使用的窗口句柄。当注册的事件发生时,对应的窗口将收到一个基于消息的通知。

int WSAAsyncSelect( SOCKET s, HWND hWnd, u_int wMsg, long lEvent);

s为需要事件通知的套接字

hWnd为接收消息的窗口句柄

wMsg为要接收的消息

lEvent为掩码,指定应用程序感兴趣的网络事件组合,主要如下:

#define FD_READ_BIT 0
#define FD_READ (1 << FD_READ_BIT)
#define FD_WRITE_BIT 1
#define FD_WRITE (1 << FD_WRITE_BIT)
#define FD_OOB_BIT 2
#define FD_OOB (1 << FD_OOB_BIT)
#define FD_ACCEPT_BIT 3
#define FD_ACCEPT (1 << FD_ACCEPT_BIT)
#define FD_CONNECT_BIT 4
#define FD_CONNECT (1 << FD_CONNECT_BIT)
#define FD_CLOSE_BIT 5
#define FD_CLOSE (1 << FD_CLOSE_BIT)

用法:要接收读写通知:

int nResult= WSAAsyncSelect(s,hWnd,wMsg,FD_READ|FD_WRITE);
if(nResult==SOCKET_ERROR)
{
  //错误处理
}

取消通知:

int nResult= WSAAsyncSelect(s,hWnd,0,0);

当应用程序窗口hWnd收到消息时,wMsg.wParam参数标识了套接字,lParam的低字标明了网络事件,高字则包含错误代码。

上一页  1 2 3 4 5  下一页

Tags:WinSock 学习 笔记

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接