WSAStartup()函数作用
WinSock(Windows Socket)编程依赖于系统提供的动态链接库(DLL)。
使用 DLL 之前必须把 DLL 加载到当前程序,可以在编译时加载,也可以在程序运行时加载。
使用 WinSock DLL 库编程之前,需要调用 WSAStartup()函数进行初始化,以指明 WinSock 规范的版本。
WSAStartup()使用
原型:
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
- wVersionRequested——WinSock版本号,低字节为主版本号,高字节为副版本号。它的类型为 WORD,等价于 unsigned short,是一个整数,所以需要用 MAKEWORD() 宏函数对版本号进行转换。
例如:MAKEWORD(1, 2); //主版本号为1,副版本号为2,返回 0x0201 MAKEWORD(2, 2); //主版本号为2,副版本号为2,返回 0x0202
- lpWSAData——指向WSAData结构体的指针。
WSAData结构体
WSAStartup() 函数执行成功后,会将与 ws2_32.dll 有关的信息写入 WSAData 结构体变量。
WSAData 定义如下:
typedef struct WSAData {
WORD wVersion; //ws2_32.dll 建议我们使用的版本号
WORD wHighVersion; //ws2_32.dll 支持的最高版本号
//一个以 null 结尾的字符串,用来说明 ws2_32.dll 的实现以及厂商信息
char szDescription[WSADESCRIPTION_LEN+1];
//一个以 null 结尾的字符串,用来说明 ws2_32.dll 的状态以及配置信息
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets; //2.0以后不再使用
unsigned short iMaxUdpDg; //2.0以后不再使用
char FAR *lpVendorInfo; //2.0以后不再使用
} WSADATA, *LPWSADATA;
WSAStartup()使用范例
#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")
int main(){
WSADATA wsaData;
WSAStartup( MAKEWORD(2, 2), &wsaData);
return 0;
}