Winsock库

//Winsock库的加载函数

 

int WSAStartup(
WORD wVersionRequested, // 指定想要加载的Winsock 库的版本,高字节为次版本号,低字节为主版本号
LPWSADATA lpWSAData // 一个指向WSADATA 结构的指针,用来返回DLL 库的详细信息
);

wVersionRequested 参数用来指定想要加载的Winsock 库的版本。为了建立此参数的值,
可以使用宏MAKEWORD(x, y),其中x 是高字节,y 是低字节。
lpWSAData 是一个指向LPWSADATA 结构的指针,WSAStartup 使用所加载库的版本信
息填充它。

WSADATA结构体:

 

typedef struct WSAData {
WORD wVersion; // 库文件建议应用程序使用的版本
WORD wHighVersion; // 库文件支持的最高版本
char szDescription[WSADESCRIPTION_LEN+1]; // 库描述字符串
char szSystemStatus[WSASYS_STATUS_LEN+1]; // 系统状态字符串
unsigned short iMaxSockets; // 同时支持的最大套接字的数量
unsigned short iMaxUdpDg; // 2.0 版中已废弃的参数
char FAR * lpVendorInfo; // 2.0 版中已废弃的参数
} WSADATA, FAR * LPWSADATA;

Winsock库的释放函数

int WSACleanup(void);

 

封装CInitSock 类!
每次写网络程序都必须编写代码载入和释放 Winsock 库,为了今后讨论方便,这里封装
一个CInitSock 类来管理Winsock 库。

 

#include <winsock2.h> // initsock.h 文件
#pragma comment(lib, "WS2_32") // 链接到WS2_32.lib
class CInitSock
{
public:
CInitSock(BYTE minorVer = 2, BYTE majorVer = 2)
{ // 初始化WS2_32.dll
WSADATA wsaData;
WORD sockVersion = MAKEWORD(minorVer, majorVer);
if (::WSAStartup(sockVersion, &wsaData) != 0)
{
exit(0);
}
}
~CInitSock()
{
::WSACleanup();
}
};

 

posted @ 2020-03-27 17:29  坦坦荡荡  阅读(157)  评论(0编辑  收藏  举报