WEB开发网
开发学院软件开发VC Windows Sockets 网络编程(三) —— WINDOWS SOCK... 阅读

Windows Sockets 网络编程(三) —— WINDOWS SOCKETS 1.1 程序设计

 2006-07-21 11:09:26 来源:WEB开发网   
核心提示: 2、异步请求服务WINDOWS SOCKETS 除支持 Berkeley Sockets 中同步请求,还增加了了一类异步请求服务函数 WSAAsyncGerXByY(),Windows Sockets 网络编程(三) —— WINDOWS SOCKETS 1.1 程序设计(4),该函数是阻

2、异步请求服务

WINDOWS SOCKETS 除支持 Berkeley Sockets 中同步请求,还增加了了一类异步请求服务函数 WSAAsyncGerXByY()。该函数是阻塞请求函数的异步版本。应用程序调用它时,由 WINDOWS SOCKETS DLL 初始化这一操作并返回调用者,此函数返回一个异步句柄,用来标识这个操作。当结果存储在调用者提供的缓冲区,并且发送一个消息到应用程序相应窗口。常用结构如下:

HANDLE taskHnd;
  char hostname="rs6000";
  taskHnd = WSAAsyncBetHostByName(hWnd,wMsg,hostname,buf,buflen);
需要注意的是,由于 Windows 的内存对像可以设置为可移动和可丢弃,因此在操作内存对象是,必须保证 WIindows Sockets DLL 对象是可用的。

3、异步数据传输

使用 send() 或 sendto() 函数来发送数据,使用 recv() 或recvfrom() 来接收数据。Windows Sockets 不鼓励用户使用阻塞方式传输数据,因为那样可能会阻塞整个 Windows 环境。下面我们看一个异步数据传输实例:

假设套接字 s 在连接建立后,已经使用了函数 WSAAsyncSelect() 在其上注册了网络事件 FD_READ 和 FD_WRITE,并且 wMsg 值为 UM_SOCK,那么我们可以在 Windows 消息循环中增加如下的分支语句:

case UM_SOCK:
   switch(lParam)
   {
   case FD_READ:
     len = recv(wParam,lpBuffer,length,0);
     break;
   case FD_WRITE:
     while(send(wParam,lpBuffer,len,0)!=SOCKET_ERROR)
     break;
   }
   break;
4、出错处理

Windows 提供了一个函数来获取最近的错误码 WSAGetLastError(),推荐的编写方式如下: len = send (s,lpBuffer,len,0);
  of((len==SOCKET_ERROR)&&(WSAGetLastError()==WSAWOULDBLOCK)){...}

上一页  1 2 3 4 

Tags:Windows Sockets 网络编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接