Windows下网络编程离不开Winsock.所以写下这个初始化Winsock的类以后直接COPY即可用.废话少说直接上代码如下:
#include <iostream> #include <WinSock2.h> #pragma comment(lib,"WS2_32") class CInitSock { public: CInitSock(BYTE minorVer=2, BYTE majorVer=2) { WSADATA wsaData; WORD sockVersion = MAKEWORD(minorVer, majorVer); if(::WSAStartup(sockVersion, &wsaData)!=0) { exit(0); } std::cout<<"Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本: "<<wsaData.wVersion<<std::endl;//0X0202 std::cout<<"这个DLL能够支持的Windows Sockets规范的最高版本.通常它与wVersion相同: "<<wsaData.wHighVersion<<std::endl;//0X0202 std::cout<<"Windows Sockets DLL对Windows Sockets实现的描述: "<<wsaData.szDescription<<std::endl; std::cout<<"Windows Sockets DLL有关的状态或配置信息: "<<wsaData.szSystemStatus<<std::endl; } ~CInitSock() { ::WSACleanup(); } }; CInitSock InitSock;//全局变量
变量类型BYTE和WORD的定义如下:
typedef unsigned char BYTE; typedef unsigned short WORD;
MAKEWORD宏的定义如下:
WORD MAKEWORD(BYTE bLow, BYTE bHigh);//低字节+高字节 #define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8))
WSAData 结构体的定义和相关字段说明如下:
typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets;//只能在仅支持TCP/TP的winsock1.1中使用 为0表示无限制 unsigned short iMaxUdpDg; //WinSock2.0版中已被废弃 char * lpVendorInfo; //WinSock2.0版中已被废弃 }WSADATA;
程序运行结果如下:
Windows Sockets DLL期望调用者使用的Windows Sockets规范的版本: 514 这个DLL能够支持的Windows Sockets规范的最高版本.通常它与wVersion相同: 514 Windows Sockets DLL对Windows Sockets实现的描述: WinSock 2.0 Windows Sockets DLL有关的状态或配置信息: Running