一、WSAStartup()函数以及DLL的加载
yuw2017的博客https://blog.51cto.com/u_12009752/1843745
-
WinSock(Windows Socket)编程依附于零碎供给的静态链接库(DLL),有两个版本:
较早的DLL是 wsock32.dll,明细为 28KB,对应的头文件为 winsock1.h;
最新的DLL是 ws2_32.dll,明细为 69KB,对应的头文件为 winsock2.h。 -
几乎一切的 Windows 操作 都曾经支撑 ws2_32.dll,所以你可以毫不犹疑地运用最新的 ws2_32.dll。
二、WSAStartup() 函数
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
-
wVersionRequested 为 WinSock 标准的版本号,低字节为主版本号,高字节为副版本号(修改版本号);
-
lpWSAData 为指向 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;
三、inet_ntoa函数
- inet_ntoa函数,该函数是将十进制网络字节序转换为点分十进制IP格式,如果不用该函数,那么将无法正确打印出IP。
函数原型: char FAR* PASCAL FAR inet_ntoa( struct in_addr in);
MSDN上本函数的原型描述为:unsigned long inet_addr( __in const char *cp);
- in:一个表示Internet主机地址的结构。
四、错误代码
- WSASYSNOTREADY
代码数值为10091,指出网络通信依赖的网络子系统还没有准备好。 - WSAVERNOTSUPPORTED
代码数值为10092,表示所需的Windows Sockets API的版本未由特定的Windows Sockets实现提供。 - WSAEINVAL
代码数值为10022,说明应用程序指出的Windows Sockets版本不被该DLL支持。 - WSAEINPROGRESS
代码数值为10036,说明一个阻塞的Winsock调用正在进行中。 - WSAEPROCLIM
代码数值为10067,说明已经达到了Windows Sockets实现所支持的任务数量的极限。 - WSAEFAULT
代码数值为10014,说明lpWSADATA参数是一个无效的指针。
网友评论