Windows下使用WSAStartup()函数加载DLL

WinSock(Windows Socket)编程依附于零碎供给的静态链接库(DLL),有两个版本:

  • 较早的DLL是 wsock32.dll,巨细为 28KB,对应的头文件为 winsock1.h;
  • 最新的DLL是 ws2_32.dll,巨细为 69KB,对应的头文件为 winsock2.h。

简直一切的 Windows 操作零碎都曾经支撑 ws2_32.dll,包含团体操作零碎 Windows 95 OSR2、Windows 98、Windows Me、Windows 2000、XP、Vista、Win7、Win8、Win10 以及效劳器操作零碎 Windows NT 4.0 SP4、Windows Server 2003、Windows Server 2008 等,所以你可以毫不犹疑地运用最新的 ws2_32.dll。

运用DLL之前必需把DLL加载到以后程序,你可以在编译时加载,也可以在程序运转时加载。

这里运用#pragma敕令,在编译时加载:

#pragma comment (lib, "ws2_32.lib")

WSAStartup() 函数

运用DLL之前,还需求挪用 WSAStartup() 函数停止初始化,以指明 WinSock 标准的版本,它的原型为:

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

wVersionRequested 为 WinSock 标准的版本号,低字节为主版本号,高字节为副版本号(修改版本号);lpWSAData 为指向 WSAData 构造体的指针。

关于 WinSock 标准

WinSock 标准的最新版本号为 2.2,较早的有 2.1、2.0、1.1、1.0,ws2_32.dll 支撑一切的标准,而 wsock32.dll 仅支撑 1.0 和 1.1。

wsock32.dll 曾经可以很好的支撑 TCP/IP 通讯程序的开辟,ws2_32.dll 次要添加了对其他协定的支撑,不外建议运用最新的 2.2 版本。

wVersionRequested 参数用来指明我们愿望运用的版本号,它的类型为 WORD,等价于 unsigned short,是一个整数,所以需求用 MAKEWORD() 宏函数对版本号停止转换。例如:

MAKEWORD(1, 2);  //主版本号为1,副版本号为2,前往 0x0201
MAKEWORD(2, 2);  //主版本号为2,副版本号为2,前往 0x0202

关于 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;

最初3个成员已弃之不必,szDescription 和 szSystemStatus 包括的信息根本没有适用价值,读者只需存眷前两个成员即可。请看下面的代码:

#include <stdio.h>
#include <winsock2.h>
#pragma comment (lib, "ws2_32.lib")
int main(){ WSADATA wsaData; WSAStartup( MAKEWORD(2, 2), &wsaData);
printf("wVersion: %d.%d\n", LOBYTE(wsaData.wVersion), HIBYTE(wsaData.wVersion));
printf("wHighVersion: %d.%d\n", LOBYTE(wsaData.wHighVersion), HIBYTE(wsaData.wHighVersion));
printf("szDescription: %s\n", wsaData.szDescription);
printf("szSystemStatus: %s\n", wsaData.szSystemStatus); return 0; }

运转后果:

wVersion: 2.2
wHighVersion: 2.2
szDescription: WinSock 2.0
szSystemStatus: Running

ws2_32.dll 支撑的最高版本为 2.2,建议运用的版本也是 2.2。

综上所述:WinSock 编程的第一步就是加载 ws2_32.dll,然后挪用 WSAStartup() 函数停止初始化,并指明要运用的版本号。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论