以WSA开头的API,结合了Windows平台特性

Windows Sockets为了支持Windows消息驱动机制,使应用程序开发者能够方便地处理网络通信,对网络事件采用了基于消息的异步存取策略;

1、WSAAsyncSelect

  该函数为指定的套接字(socket)请求基于Windows消息的网络事件通知,并自动将该套接字设置为非阻塞模式;

  int WSAAsyncSelect (

    SOCKET s,

    HWND hWnd,

    unsigned int wMsg,

    long lEvent

  );

    s:标识请求网络事件通知的套接字;

    hWnd:标识一个网络事件发生时接收消息的窗口的句柄;

    wMsg:指定网络事件发生时窗口将接收到的消息;

    lEvent:指定应用程序感兴趣的网络事件,包括:

      FD_READ  --有关是否可读的通知,以便读取数据

      FD_WRITE  --有关是否可写的通知,以便发送数据

      FD_OOB  --是否带外(OOB)数据抵达的通知

      FD_ACCEPT  --与进入连接有关的通知

      FD_CONNECT  --连接操作已完成的通知

      FD_CLOSE  --与套接字关闭有关的通知

      FD_QOS  --套接字“服务质量”发生更改的通知

      FD_GROUP_QOS  --套接字组“服务质量”发生更改的通知

      FD_ROUTING_INTERFACE_CHANGE  --在指定的方向上,与路由接口发生变化有关的通知

      FD_ADDRESS_LIST_CHANGE  --针对套接字的协议家族,本地地址列表发生变化的通知

2、WSAEnumProtocols

  该函数可获得系统中安装的网络协议的相关信息,该函数不能重复调用,传入的缓冲区必须足够大以便能存放所有元素;

  int WSAEnumProtocols (

    LPINT lpiProtocols,

    LPWSAPROTOCOL_INFO lpProtocolBuffer,

    ILPDWORD lpdwBufferLength

  );

      lpiProtocols:一个以NULL结尾的协议标识号数组;如果为NULL,则该函数返回所有可用协议的信息,否则只返回数组中列出的协议信息;

      lpProtocolBuffer:作为返回值使用,一个用WSAPROTOCOL_INFO结构体填充的缓冲区;WSAPROTOCOL_INFO结构体用来存放或得到一个指定协议的完整信息;

      lpdwBufferLength:在输入时,指定传递给该函数的参数lpProtocolBuffer缓冲区的长度;在输出时,存有获取所有请求信息需传递给该函数的最小缓冲区的长度;

3、WSAStartup

  该函数将初始化进程使用的socket库;

  int WSAStartup (

    WORD wVersionRequested,

    LPWSADATA lpWSAData

  );

      wVersionRequested:可以使用的socket库的版本;高位字节指定库的副版本,低位字节为主版本;

      lpWSAData:返回可用库的信息,是一个指向WSADATA数据结构类型变量的指针;

4、WSACleanup

  该函数将终止程序对socket库的使用;

  int WSACleanup();

5、WSASocket

  该函数将创建套接字;

  SOCKET WSASocket (

    int af,

     int type,

      int protocol,

    LPWSAPROTOCOL_INFO lpProtocolInfo,

     GROUP g,

    DWORD dwFlags

  );

      af:指定地址族,AF_UNIX/AF_LOCAL/AF_FILE--本地通信;AF_INET--网络通信IPv4(主用);AF_INET6--网络通信IPv6(前缀AF替换成PF效果一样);

      type:指定socket类型,SOCK_STREAM--流式套接字,SOCK_DGRAM--数据报式套接字;

      protocol:推荐为0;

      lpProtocolInfo:一个指向WSAPROTOCOL_INFO结构体的指针,该结构体定义了所创建的套接字的特性;可以为NULL;

      g:保留参数;

      dwFlags:指定套接字属性的描述;如果设为WSA_FLAG_OVERLAPPED,将创建一个重叠套接字;

6、WSARecv---recv函数的扩展版本

  int WSARecv (

    SOCKET s,

     LPWSABUF lpBuffers,

     DWORD dwBufferCount,

     LPDWORD lpNumberOfBytesRecvd,

     LPDWORD lpFlags,

     LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE

  );

7、WSASend---send函数的扩展版本

  int WSASend (

    SOCKET s,

    LPWSABUF lpBuffers,

    DWORD dwBufferCount,

     LPDWORD lpNumberOfBytesSent,

    DWORD dwFlags,

    LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE

  );

8、WSARecvFrom---recvfrom函数的扩展版本

  该函数接收数据报类型的数据,并保存数据发送方的地址;通过该函数的第2个参数可知,在调用该函数接收数据时,可同时定义多个WSABUF结构体变量来接收数据,并通过该函数的第3个参数指定WSABUF结构体的数量;

  int WSARecvFrom (

    SOCKET s,

    LPWSABUF lpBuffers,

     DWORD dwBufferCount,

     LPDWORD lpNumberOfBytesRecvd,

    LPDWORD lpFlags,

    struct sockaddr FAR * lpFrom,

     LPINT lpFromlen,

      LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE

  );

      s:标识套接字;

      lpBuffers:指向WSABUF结构体数组的指针,该结构体的定义为:

        typedef struct __WSABUF{

          u_long len;     //缓冲区的长度

          char FAR *buf;  //指向缓冲区的指针

        }WSABUF, FAR * LPWSABUF;

      dwBufferCount:lpBuffers数组中WSABUF结构体的数目;

      lpNumberOfBytesRecvd:指向本次调用所接收的字节数的指针;

      lpFlags:取值包括:

        MSG_PEEK  --浏览到来的数据,这些数据被复制到缓冲区,但并不从输入队列中移除;仅对非重叠套接字有效;

        MSG_OOB  --处理带外(OOB)数据

        MSG_PARTIAL  --仅用于面向消息的套接字;作为输出参数时,表明数据是发送方传送的消息的一部分,消息的剩余部分将在随后的接收操作中被传送,如果随后的某个接收操作没有此标志,就表明这是发送方发送的消息的尾部;作为输入参数时,表明接收操作已完成,即使只是一条消息的部分数据已被服务提供者所接收;

      lpFrom:一个可选的指针,指向重叠操作完成后存放源地址的缓冲区;

      lpFromlen:一个指向lpFrom指定的缓冲区大小的指针,仅当指定了lpFrom参数时才须使用该参数;

      lpOverlapped:一个指向WSAOVERLAPPED结构体的指针,非重叠套接字则忽略此参数;

      lpCompletionROUTINE:一个指向接收操作完成时调用的完成例程的指针,该例程实际上就是如下所示的一个回调函数,非重叠套接字则忽略此参数;

        void CALLBACK CompletionROUTINE(

          IN DWORD dwError,

          IN DWORD cbTransferred,

          IN LPWSAOVERLAPPED lpOverlapped,

          IN DWORD dwFlags

        );

9、WSASendTo---sendto函数的扩展版本

  int WSASendTo (

    SOCKET s,

    LPWSABUF lpBuffers,

    DWORD dwBufferCount,

     LPDWORD lpNumberOfBytesSent,

    DWORD dwFlags,

     const struct sockaddr FAR * lpTo,

      int iToLen,

     LPWSAOVERLAPPED lpOverlapped,

    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionROUTINE

  );

      s:标识一个套接字

      lpBuffers:一个指向WSABUF结构体的指针;

      dwBufferCount:lpBuffers数组中WSABUF结构体的数目;

      lpNumberOfBytesSent:一个指向本次调用所发送的字节数的指针;

      dwFlags:指示影响操作行为的标志位,设为0;

      lpTo:可选指针,指向目标套接字的地址;

      iToLen:lpTo中地址的长度;

      lpOverlapped:一个指向WSAOVERLAPPED结构体的指针,非重叠套接字忽略该参数;

      lpCompletionROUTINE:一个指向接收操作完成时调用的完成例程的指针,非重叠套接字忽略该参数;

时间: 2024-10-23 10:51:25

以WSA开头的API,结合了Windows平台特性的相关文章

[转*译]Networking API Improvements in Windows 10

在当今,以云优先,移动优先技术为宗旨的时代下,大多数Apps都至少有一些与web服务或网络上其他设备的集成.这些包括应用程序,它获取天气在线内容,新闻或体育比赛的分数,媒体或下载的播客,甚至对等网络游戏.聊天或VoIP应用.这些应用程序通过使用各种各样的网络API来共同构建通用应用程序平台. 在windows 10中,我们的网络团队投入了大量努力改善开发人员在使用这些网络API时在功能和灵活性方面的运行速度和内存性能.在这篇博客文章,我们将讨论一些关键我们在这方面取得改进,并向你说明该如何在您自

cocos2d-x 开头配置(Windows 平台)

工欲善其事,必先利其器. 要使用 cocos2d-x 引擎,就要配置(或者安装)引擎,到 cocos2d-x 官网下载页下载引擎,官网给了2.x和3.x两个版本,我使用的是3.6的版本,3.x的版本类名,函数名更有C++范!中文官网有很多很多的教程, cocos开发平台 则给开发者提供许多有用的东西. cocos2d-x 引擎是跨平台的游戏开发引擎,开发的游戏可以运行在 IOS,ANDROID,WINDOWS PHONE,MAC,WIN32等设备上,可用的开发平台通常有WINDOWS和MAC,本

Windows平台内核级文件访问

1.背景     在windows平台下,应用程序通常使用API函数来进行文件访问,创建,打开,读写文件.从kernel32的CreateFile/ReadFile/WriteFile函数,到本地系统服务,再到FileSystem及其FilterDriver,经历了很多层次.在每个层次上,都存在着安全防护软件,病毒或者后门作监视或者过滤的机会.作为安全产品开发者,我们需要比别人走得更远,因此我们需要一个底层的“windows平台内核级文件访问”的方法来确保我们能够看到正确的干净的文件系统. 2.

Windows平台Python编程必会模块之pywin32

在Windows平台上,从原来使用C/C++编写原生EXE程序,到使用Python编写一些常用脚本程序,成熟的模块的使用使得编程效率大大提高了. 不过,python模块虽多,也不可能满足开发者的所有需求.而且,模块为了便于使用,通常都封装过度,有些功能无法灵活使用,必须直接调用Windows API来实现. 要完成这一目标,有两种办法,一种是使用C编写Python扩展模块,或者就是编写普通的DLL通过python的ctypes来调用,但是这样就部分牺牲掉了Python的快速开发.免编译特性. 还

windows平台python 2.7环境编译安装zbar

最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图片扫描,支持多平台,例如 iPhone,Andriod 手机,同时 ZBar封装了二维码扫描的 API 开发包. ZBar 目前条码类型有:EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 and QR Code. 从

基于科大讯飞语音云windows平台开发

前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该很简单的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做的是那么回事了,虽然还是不好用,但基本功能实现了. 该软件使用VS2008C++/CLR开发,由于科大讯飞提供的是C的API接口,结果到这边就是各种不兼容,CLR是基于托管堆运行的,而这个API有是非托管堆的,使用了各种指针,原本打算使用C#来做,最后门外汉的我也没能做到C#和C指针完美结合,真怀恋单片机

在Windows平台搭建C语言开发环境的多种方式

新接触C语言,如何进行C语言开发环境的搭建值得思考并整理 注:本文知识来源于  Windows 平台搭建C语言集成开发环境 - 极客学院 一.在Windows平台配置GNU环境 二.在Windows平台使用Sublime Test开发C语言程序 三.在Windows平台使用VisualStudio开发C语言程序 四.在Windows平台搭建EclipseCDT集成开发环境 五.在Windows平台搭建Clion集成开发环境 一.在Windows平台配置GNU环境 GNU http://www.g

Windows平台的Oracle使用USE_SHARED_SOCKET的作用

前两天有位朋友在QQ群问了一个问题,背景如下: 继续问后,有如下回复: 1.对方服务器连接无问题. 2.从client可以telnet服务器的1521端口. 3.tnsping正常. 4.对方服务器没有设置IP信任. 5.windows 2003 server,Oracle 10.1.0.2.0 但从客户端sqlplus就是超时,无法连接. 首先,看下ORA-12170的定义: oerr ora 12170 12170, 00000, "TNS:Connect timeout occurred&

解决Windows平台通过cURL上传APP到蒲公英pgyer平台时无法使用中文升级描述的问题

解决Windows平台通过cURL上传APP到蒲公英pgyer平台时无法使用中文升级描述的问题 官方上传命令 curl -F [email protected]"315.apk" -F uKey=XXX -F _api_key=OOO -F updateDescription=中文 http://www.pgyer.com/piv1/app/upload 问题描述 同样的命令: 在Mac平台上传IPA文件时,能够正常显示中文更新描述 但是在Windows平台上传APK文件时,“更新提示