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() 函数停止初始化,并指明要运用的版本号。
联系信息:邮箱aoxolcom@163.com或见网站底部。
请登录后发表评论
注册
社交帐号登录