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()函数卸载所加载的库。