本节介绍在Windows上加载DLL。 学习Linux套接字的读者可以跳过。
Winsock (windows套接字)编程依赖于系统提供的动态链接库(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、windows7、Windows 98、windows10和服务器
在使用DLL之前,必须将DLL加载到当前程序中。 可以在编译时加载,也可以在程序运行时加载。 用《动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)》进行了说明。
这里使用#pragma命令在编译时加载。
#pragmacomment(lib,' ws2_32.lib ' ) ) ) ) ) ) ) 65
WSAStartup ()函数
在使用DLL之前,必须调用WSAStartup ()函数进行初始化,以指示WinSock规范的版本。 其原型如下。
int wsa startup (wordwversionrequested,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 )宏函数转换版本号。 例如:
制造工人(1,2 ); //主版本号为1,次版本号为2,返回0x0201
制造工人(2,2 ); //主版本号为2,次版本号为2,返回0x0202
关于WSAData结构
WSAStartup ) )成功执行函数后,有关ws2_32.dll的信息将写入WSAData结构变量。 WSAData的定义如下:
类型结构wsadata {
魔兽世界; //ws2_32.dll推荐的版本号
魔兽世界; //ws2_32.dll支持的最高版本号
ws2 _ 32 .以null结尾的字符串,用于说明dll的实现和供应商信息
charszdescription [ wsa description _ len1];
ws2 _ 32 .以null结尾的字符串,用于说明dll的状态和配置信息
charszsystemstatus [ wsa sys _ status _ len1];
无符号短整型I maxsockets; //2.0以后不使用
无符号短整型imaxudpdg; //2.0以后不使用
char FAR *lpVendorInfo; //2.0以后不使用
} WSADATA,*LPWSADATA;
最后三个成员已经被舍弃,szDescription和szSystemStatus中包含的信息几乎没有实用价值,读者只需关注前两个成员即可。 请看下面的代码:
#包含
#包含
#pragmacomment(lib,' ws2_32.lib ' ) ) ) ) ) ) ) 65
int main () )。
WSADATA wsaData;
WSAstartup(makeword ) 2,2 ),wsaData );
printf(wversion:%d.%dn )、lobyte(Wsadata.wversion )、lobyte(Wsadata.wversion ) );
printf (whighversion : % d.% d (n ),lobyte ) wsadata.whighversion,hibyte ) wsadata.whighversion );
printf (SZ描述: % sn (,wsadata.SZ描述);
printf(szsystemstatus3360%sn (,wsaData.szSystemStatus ) );
返回0;
}
执行结果:
wVersion: 2.2
wHighVersion: 2.2
szDescription: WinSock 2.0
szsystemstatus :运行
ws2_32.dll支持的最高版本为2.2,建议的版本也为2.2。
因此,WinSock编程的第一步是加载ws2_32.dll,调用WSAStartup )函数进行初始化,并指定要使用的版本号。