现在的位置: 首页 > 综合 > 正文

一个初始化WINSOCK的简单类

2014年01月26日 ⁄ 综合 ⁄ 共 1527字 ⁄ 字号 评论关闭

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
本人郑重声明如下 一、本文来自CSDN博客,传送门:http://BlOG.CSDN.NET/yirancpp 二、All Rights Reserved. 任何个人或网站转载本文时不得移除本声明. 三、不得对文章进行修改,除非明确说明.同时欢迎大家评论转载和分享.

抱歉!评论已关闭.