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

网络 网络管理
下面我们来对获取网络协议的内容进行一下具体的讲解。那么每个步骤以及相关的代码我们都做了明确的介绍,希望对大家有所帮助。

对于已经安装过的网络协议来说,我们可通过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 <winsock2.h> 

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<nRet; 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:指向网络协议族,由此参数获取网络协议。

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

责任编辑:佟健 来源: hi.baidu.com
相关推荐

2010-08-29 21:21:18

DHCP协议

2010-08-23 17:13:25

设置DHCP协议

2012-02-08 10:31:04

FCoE

2010-07-05 16:30:45

BGP协议

2010-07-02 14:37:20

配置SSH协议

2020-07-28 08:38:10

TCPUDP协议

2010-08-30 20:00:00

命令行DHCP

2010-07-01 14:22:02

配置FTP服务器

2011-08-24 09:35:54

ICMPIGMPRIP

2010-09-09 16:56:08

七层网络协议

2024-01-07 17:11:53

网络IDC机房

2021-02-21 22:21:46

网络安全IT安全NSA

2014-06-13 13:47:31

UDP

2009-12-14 17:32:46

路由选择协议

2011-08-24 10:31:01

网络协议SLIPPPP

2010-07-05 10:38:49

网络层次协议

2010-09-09 15:25:35

网络协议

2010-06-17 17:51:12

资源预留协议

2010-06-21 15:21:17

IPv6网络协议

2010-06-10 14:20:23

点赞
收藏

51CTO技术栈公众号