初始化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函数获得错误代码。

原文地址:https://www.cnblogs.com/cyx-b/p/12529832.html

时间: 2024-10-13 20:32:12

初始化Winsock库的相关文章

winsock库

加载Winsock库函数 : WSAStartup 1 int WSAStartup( 2 WORD wVersionRequested,//指定想要加载的winsock库 3 LPWSADATA lpWSAData//指向 WSADATA的指针,用来返回DLL库的详细信息 4 ); WSADat头结构 1 typedef struct WSAData 2 { 3 WORD wVersion; //库文件建议应用程序使用的版本 4 WORD wHighVersion; //库文件支持的最高版本

Git 初始化版本库

创建带工作区的版本库 在开始一个新项目时,首先就要创建并初始化代码库.如果是在本机的工作目录中,那么: $ git init 也就够用了.如果想要初始化的版本库不在当前目录,需要为 git init 命令指定版本库所在的目录: $ git init hello 执行完命令,在当前目录或您指定的目录下会创建一个名为 .git 的目录,这就是版本库了. 带工作区的版本库主要用于日常工作.其工作模式为:先把代码提交到本地的版本库中,然后通过本地库推送到服务器上的版本库中. 创建裸版本库 相对于带工作区

初始化git库并配置自动部署

1.初始化库 git init --bare wap.git 2.配置wap.git/config文件 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true ignorecase = true precomposeunicode = true worktree = /data1/project/admin [receive] denycurrentbranch = ignor

Winsock IO模型之select模型

之所以称其为select模型是因为它主要是使用select函数来管理I/O的.这个模型的设计源于UNIX系统,目的是允许那些想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字. int select( int nfds,                                                 // 忽略,仅是为了与Berkeley套接字兼容 fd_set* readfds,                                  // 指向一个套接字集合,

winsock教程- windows下的socket编程(c语言实现)

winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下代码片段只能运行在windows下.windows API中的socket编程部分叫做winsock. 你电脑上做出的任何网络通信背后基本上都有socket,它是一个网络的基本组成部分.举个例子说当你在浏览器键入www.google.com的时候,socket连接到google.com并且取回那个页面然后才

Winsock—I/O模型之选择模型(一)

Winsock中提供了一些I/O模型帮助应用程序以异步方式在一个或多个套接字上管理I/O. 这样的I/O模型有六种:阻塞(blocking)模型,选择(select)模型,WSAAsyncSelect模型,WSAEventSelect模型,重叠(overlapped)模型,完成端口(completion port)模型. 选择模型: 目的:允许想要避免在套接字调用上阻塞的应用程序有能力管理多个套接字. 一.select函数             select函数可以确定一个或者多个套接字的状态

winsock 收发广播包

?广播包的概念 广播包通常为了如下两个原因使用:1 一个应用程序希望在本地网络中找到一个资源,而应用程序对于该资源的地址又没有任何先验的知识. 2 一些重要的功能,例如路由要求把它们的信息发送给所有找到的邻机. 被广播信息的目的地址取决于这一信息将在何种网络上广播.Internet域中支持一个速记地址用于广播-INADDR_BROADCAST.由于使 用广播以前必须捆绑一个数据报套接口,所以所有收到的广播消息都带有发送者的地址和端口. 广播通信是无连接的通信,通信前不需要建立连接.不需要list

(一)理解网络编程和套接字

学习<TCP/IP网络编程> 韩 尹圣雨 著 金国哲 译 套接字类似电话 一.服务器端套接字(listening套接字)---接电话套接字 ①调用socket函数---安装电话机 #include <sys/socket.h> int socket(int domain, int type, int protocol); //成功时返回文件描述符,失败时返回-1 ②调用bind函数---分配电话号码 #include <sys/socket.h> int bind(in

最近做RTSP流媒体的实时广播节目

//h264视频流打包代码 // NALDecoder.cpp : Defines the entry point for the console application. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <memory.h> #include "h264.h" #include "initsock.h" CInit