zoukankan      html  css  js  c++  java
  • 初始化Winsock库

    Winsock库对Windows的Socket编程有很好的支持,它提供了所有Socket相关的API函数。常用的Winsock库有1和2两个版本,流行应用程序使用的是Winsock2版本。其对应的动态链接库是WS2_32.dll,使用时需要包含Winsock2.h头文件,并要导入WS2_32.lib库文件。无论是使用哪种协议,无论是客户端还是服务端,在进行Socket编程之前首先应该对Winsock库(WS2_32.dll)进行初始化,完成初始化Winsock库工作的API函数是WSAStartup,其函数原型如下。

    int WSAStartup(
      WORD   wVersionRequested,   //指定调用者能够使用的Winsock的最高版本
      LPWSADATA lpWSAData       //执行WSADATA结构体的指针
    );

    第一个参数wVersionRequested指定调用者使用的Winsock的最高版本,它是一个WORD类型,高字节表示副版本号,低字节表示主版本号。通常使用MAKEWORD宏构造此参数。第二个参数lpWSAData是一个指向WSADATA结构体的指针,用来接收所使用的Winsock库的详细信息。WSADATA结构体定义如下。

    typedef struct WSAData {
            WORD                wVersion;                               //版本
            WORD               wHighVersion;                        //最高版本
    #ifdef _WIN64
            unsigned short     iMaxSockets;
            unsigned short     iMaxUdpDg;
            char FAR *         lpVendorInfo;
            char               szDescription[WSADESCRIPTION_LEN+1];
            char               szSystemStatus[WSASYS_STATUS_LEN+1];
    #else
            char               szDescription[WSADESCRIPTION_LEN+1]; //描述字符串
            char               szSystemStatus[WSASYS_STATUS_LEN+1]; //系统状态字符串
            unsigned short     iMaxSockets;                         //最大套接字数量
            unsigned short     iMaxUdpDg;                           //版本2中忽略
            char FAR *         lpVendorInfo;                        //版本2中忽略
    #endif
    } WSADATA, FAR * LPWSADATA;

     函数执行成功返回0,否则将返回如下错误代码。

    WSASYSNOTREADY          //网络未就绪
    WSAVERNOTSUPPORTED      //不支持的版本
    WSAEINPROGRESS          //版本1的Winsock模块正在进行中
    WSAEPROCLIM             //已经达到限制值
    WSAEFAULT               //lpWSAData是一个无效指针
     

     当Winsock库使用完毕后应该使用WSACleanup函数终止对Winsock库(WS2_32.dll)的调用。在多线程环境下,WSACleanup将终止所有线程的Scoket操作。函数原型如下。

    int WSACleanup(void)

    函数执行成功则返回0,执行失败则返回SOCKET_ERROR值。可以调用WSAGetLastError函数获得错误代码。

  • 相关阅读:
    卷积神经网络的权值参数个数的量化分析
    Torch 的安装与基本用法
    Torch 的安装与基本用法
    操作系统的 (program)loader(程序加载器)
    操作系统的 (program)loader(程序加载器)
    Python 模块学习:os模块
    Python 正则表达式-OK
    Perl参考函数
    svn: E200030: sqlite[S10]: disk I/O error
    Perl调用外部命令的方式和区别
  • 原文地址:https://www.cnblogs.com/cyx-b/p/12529832.html
Copyright © 2011-2022 走看看