Socket学习随笔(一)

1、打开Winsock——WSAStartup()

      使用Winsock API编制的网络应用程序中,在调用任何一个Winsock函数之前,都必须先检查协议栈的安装情况,也就是检查系统中是否有Windows Sockets的实现库。通过调用WSAStartup()函数便可检测系统中有没有一个或多个Windows Sockets实现,本函数必须是应用程序或DLL调用的第一个Windows Sockets函数,它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节。应用程序或DLL只能在一次成功的WSAStartup()调用之后才能进一步调用其他的Windows Sockets API函数。

1.1 函数的格式

int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

1.2 参数说明

wVersionRequested:此参数是一个WORD型(双字节型)数值,它指定准备在应用程序中要使用的Winsock库的版本号。其中 ,用高位字节指定副版本,用低位字节指定主版本。

lpWSAData:此参数是一个指向WSADATA结构的指针。当该函数被调用时,它返回关于Windows Sockets实现的详细信息, 该结构的定义如下:

typedef struct WSAData {

        WORD                    wVersion;

        WORD                    wHighVersion;

        char                    szDescription[WSADESCRIPTION_LEN+1];

        char                    szSystemStatus[WSASYS_STATUS_LEN+1];

        unsigned short          iMaxSockets;

        unsigned short          iMaxUdpDg;

        char FAR *              lpVendorInfo;

} WSADATA;

各字段的含义说明如下:

wVersion:调用者希望使用的Winsock版本号。

wHighVersion:加载的Winsock库所支持的最高Winsock版本,通常和wVersion的值相同。

szDescription:系统加载的Winsock库的说明字符串,如“Winsock 2.0”。

szSystemStatus:系统状态或配置信息的说明字符串。

iMaxSockets:套接口的最大编号(该字段被Winsock 2 或其后的版本忽略)。

iMaxUdpDg:UDP数据报的最大容量(该字段被Winsock 2 或其后的版本忽略)。

lpVendorInfo:厂商专有信息(该字段被Winsock 2 或其后的版本忽略)。

该结构中,WSAStartup()函数返回的比较有用的信息是wVersion和wHighVersion这两个关于Winsock版本的字段, 其他字段则很少用。

1.3 函数返回信息

WSAStartup()函数的返回值是一个整数,如果调用成功则返回0

WSAStartup()函数调用不成功时返回如下的错误信息:

WSASYSNOTREADY:在Winsock的 头文件Winsock.h中,该错误代码定义的数值为10091,它表明加载的Winsock DLL不存在或底层的网络子 系统无法使用。

WSAVERNOTSUPPORTED:该代码的数值为10092,所需的Windows Sockets API的版本未由特定的Windows Sockets实现提供。如果由

wVersion返回的版本用户不能接受,则要调用WSACleanup()函数清除对Winsock的加载。

WSAEINVAL:该代码的数值为10022,说明应用程序指出的Windows Sockets版本不能被该Winsock DLL的实现所支持。

WSAEINPROGRESS:该代码的数值为10036,说明一个阻塞的Winsock调用正在进行中。

WSAEPROCLIM:该代码的数值为10067,说明已经达到了Windows Sockets实现所支持的任务数量的极限

WSAEFAULT:该代码的数值为10014,说明lpWSAData参数是一个无效的指针。

。。。。。。

1.4 函数使用说明

该函数在程序中的基本使用方法如下:

#include<Winsock2.h>

//...其他代码

WORD wVersionRequested;

WSADATA wsaData;

wVersionRequested = MAKEWORD(2, 2);

if(WSAStartup(wVersionRequested, &wsaData) != 0)

{

//Winsock初始化错误

//输出Winsock初始化错误提示信息

return;

}

//...其他代码


结束对Winsock DLL库的使用时,一定要调用WSACleanup()函数卸载所加载的库。




















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值