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