获取网络协议的步骤和代码
创始人
2024-07-13 12:41:10
0

对于已经安装过的网络协议来说,我们可通过C++的使用来进行获取网络协议的工作。那么具体的操作步骤,以及相关的代码我们在下文中进行了介绍和讲解,步骤比较细致,那么本文的总结,望对大家有所帮助。

一、创建对话框应用程序

获取网络协议的步骤和代码

二、编辑对话框资源

控件ID及标题

  1. IDC_LIST_PROTOCOLS           
  2. IDC_GETNETPROTOCOLS     获取网络协议    
  3. IDOK                    确认  
  4. IDCANCEL                取消 

获取网络协议的步骤和代码#p#

三、添加变量、函数

1、添加变量

获取网络协议的步骤和代码

2、添加函数

获取网络协议的步骤和代码#p#

四、添加代码

五、添加对象/库模块

1、 于“GetNetProtocolsDlg.cpp”文件内添加包含语句

  1. #include "stdafx.h"  
  2. #include "GetNetProtocols.h"  
  3. #include "GetNetProtocolsDlg.h"  
  4. #include  

2、添加获取网络协议的函数代码

  1. void CGetNetProtocolsDlg::OnGetnetprotocols()   
  2. {  
  3. // TODO: Add your control notification handler code here  
  4. WSADATA WSAData;  
  5.     int i, nRet;  
  6.     DWORD dwErr;  
  7.     WSAPROTOCOL_INFO *lpProtocolBuf = NULL;  
  8.     DWORD dwBufLen = 0;  
  9.  
  10. CString strTemp;  
  11.  
  12.     if (WSAStartup(MAKEWORD(2,2), &WSAData))  
  13. {  
  14.         strTemp.Format("WSAStartup %d", WSAGetLastError());  
  15.    m_ListProtocols.AddString(strTemp);  
  16. }  
  17.     else//第一层  
  18.     {  
  19.    //方法:WSAEnumProtocols获得计算机安装的协议  
  20.         // First, have WSAEnumProtocols tell you how big a buffer you need.  
  21.         nRet = WSAEnumProtocols(NULL, lpProtocolBuf, &dwBufLen);  
  22.         if (SOCKET_ERROR != nRet)  
  23.    {  
  24.     strTemp.Format("WSAEnumProtocols: should not have succeeded\r\n");  
  25.     m_ListProtocols.AddString(strTemp);  
  26.    }  
  27.         else if (WSAENOBUFS != (dwErr = WSAGetLastError()))  
  28.    {  
  29.             // WSAEnumProtocols failed for some reason not relating to buffer size - also odd.  
  30.             strTemp.Format("WSAEnumProtocols(1): %d\r\n", WSAGetLastError());  
  31.     m_ListProtocols.AddString(strTemp);  
  32.    }  
  33.         else//第二层  
  34.    {  
  35.             // WSAEnumProtocols failed for the "expected" reason.  
  36.             // Now you need to allocate a buffer that is the right size.  
  37.             lpProtocolBuf = (WSAPROTOCOL_INFO *)malloc(dwBufLen);  
  38.             if (lpProtocolBuf)  
  39.     {  
  40.                 // Now you can call WSAEnumProtocols again with the  
  41.                 // expectation that it will succeed  
  42.                 // because you have allocated a big enough buffer.  
  43.                 nRet = WSAEnumProtocols(NULL, lpProtocolBuf, &dwBufLen);  
  44.                 if (SOCKET_ERROR == nRet)  
  45.      {                      
  46.       strTemp.Format("WSAEnumProtocols(3): %d\r\n", WSAGetLastError());  
  47.       m_ListProtocols.AddString(strTemp);  
  48.      }  
  49.                 else 
  50.                 {  
  51.       // Enumerate the protocols.  
  52.       strTemp.Format("该计算机安装的网络协议有:");  
  53.       m_ListProtocols.AddString(strTemp);  
  54.       for (i=0; i
  55.       {  
  56.        strTemp.Format(" 协议%d:<%s>\r",i+1, lpProtocolBuf[i].szProtocol);  
  57.        m_ListProtocols.AddString(strTemp);  
  58.       }  
  59.                 }  
  60.                 free(lpProtocolBuf);  
  61.     }//if (lpProtocolBuf)结束  
  62.    }//第二层else结束  
  63.     }//第一层else结束  
  64. //调用WSACleanup函数进行WinSock的清理工作,以便释放其占用的资源  
  65.     WSACleanup();   

点“工程”,点“设置”,点选“连接”,添加“Ws2_32.lib ”模块。

获取网络协议的步骤和代码

六、编译

七、运行

获取网络协议的步骤和代码#p#

八、函数说明:

1、WSAStartup函数声明

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)

wVersionRequested:为将要使用之Windows Stockets API版本,是一高位为次版本号,低位为主版本号的WORD类型整数。

lpWSAData:指向WSADATA资料之指针。

功能:完成windows Sockets之一系列初始化,乃使用windows Sockets之应用程序都必须调用的函数。该函数调用成功,返回“0”,可以使用Sockets;失败则返回错误值,使用不了Sockets。

2、WSAEnumProtocols函数声明

int WSAEnumProtocols(LPINT lpiProtocols,LPWSAPROTOCOL_INFO lpProtocolBuffer,LPDWORD lpdwBufferLength)

lpiProtocols:一个以NULL结尾的协议标识号数组,为可选参数。lpdwProtocols为NULL时返回所有可用协议信息;否则返回数组所列协议信息。

lpProtocolBuffer:以结构WSAPROTOCOL_INFO填充之缓冲区。WSAPROTOCOL_INFO结构用于存取一给定协议之完整信息。

lpdwBufferLength:输入时,用于存放传递给WSAEnumProtocols()函数之lpProtocolBuffer缓冲区长度;输出时,为所有获取网络协议的信息需传递于WSAEnumProtocols()函数之缓冲区长度。

功能:获取网络协议安装于本地PC机上的可用网络协议族,成功则返回协议数目,失败则返回错误值。

3、WSAPROTOCOL_INFO结构定义

  1. typedef struct_WSAPROTOCOL_INFO{  
  2.     DWORD                                    dwServiceFlags1;  
  3.     DWORD                                    dwServiceFlags2;  
  4.     DWORD                                    dwServiceFlags3;  
  5.     DWORD                                    dwServiceFlags4;  
  6.     DWORD                                    dwServiceFlags;  
  7.     GUID                                          ProviderId;  
  8.     DWORD                                    dwCatalogEntryId;  
  9.     WSAPROTOCOLCHAIN         ProtocolChain;  
  10.     int                                                iVersion;  
  11.     int                                                iAddressFamily;  
  12.     int                                                iMaxSockAddr;  
  13.     int                                                iMinSocAddr;  
  14.     int                                                iSocketType;  
  15.     int                                                iProtocl;  
  16.     int                                                iProtoclMaxOffset;  
  17.     int                                                iNetworkByteOrder;  
  18.     int                                                iSecurityScheme;  
  19.     DWORD                                    dwMessageSi;  
  20.     DWORD                                    dwProviderReserved;  
  21.     TCHAR                                      szProtocol[WSAPROTOCOL_LEN+1];  
  22.    }WSAPROTOCOL_INFO,*LPWSAPROTOCOL_INFO 

dwServiceFlags1:表示不同协议属性之一个位字段。

szProtocol:指向网络协议族,由此参数获取网络协议。

功能:存放和获取一给定协议的完整信息。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...