首页 > 系统 > Linux > 正文

封装获取网络信息Linux—API类

2024-06-28 13:27:56
字体:
来源:转载
供稿:网友
封装获取网络信息linux—API类

  封装获取网络信息Linux—API类

封装好的库:

 1 #ifndef NETINFORMATION_H 2 #define NETINFORMATION_H 3  4 #include <netdb.h>//包含gethostbyname gethostbyaddr 5 #include <netinet/in.h> 6 class NetInformation 7 { 8     PRivate: 9 10             struct hostent *hostInformation;11             struct servent *hostServer;12 13     public:14             void reset();15 16             void getHostInfoByAddr();17             void getHostInfoByName();18             void printHostInformation();19 20             void getHostServer(const char *name,const char *proto);21             void getHostServer(int port,const char *proto);22             void printHostServer();23 24 25 };26 27 #endif
  1 #include "NetInformation.h"  2   3   4 #include <unistd.h>//包含 gethostname  5 #include <netinet/in.h>//此文件中包含 in_addr  6 #include <arpa/inet.h> //此文件中包含 inet_ntoa  7 #include <iostream>  8 #include <cstring>  9 using std::cout; 10 using std::endl; 11  12  13 void NetInformation::getHostInfoByName() 14 { 15     char hostName[256]; 16  17     if(gethostname(hostName,255)==0) ;//成功时返回0,失败时返回-1 18         else cout<<"gethostname failed"; 19     hostInformation=gethostbyname(hostName); 20 } 21  22 void NetInformation::getHostInfoByAddr() 23 { 24     struct in_addr hostAddr; 25     char addr[12]; 26  27     strcpy(addr,"127.0.0.1"); 28     inet_aton(addr,&hostAddr); 29     hostInformation=gethostbyaddr(&hostAddr,sizeof(&hostAddr),AF_INET); 30 } 31  32 void NetInformation::printHostInformation() 33 { 34       char **ptr,**PPTr,str[32]; 35       cout<<"主机名:"<<hostInformation->h_name<<endl; 36  37       cout<<"主机别名:"; 38       ptr = hostInformation->h_aliases; 39       if(*ptr==0) 40         cout<<"没有查询到主机别名"; 41         while(*ptr) 42         { 43             cout<<*ptr; 44             ++ptr; 45         }; 46       cout<<endl; 47  48     //根据地址类型,将地址打出来 49     switch(hostInformation->h_addrtype) 50     { 51             case AF_INET: 52             case AF_INET6: 53                     pptr=hostInformation->h_addr_list; 54                     //将刚才得到的所有地址都打出来。其中调用了inet_ntop()函数 55                     while(*pptr) 56                          { 57                              cout<<"主机地址:"<<inet_ntop(hostInformation->h_addrtype, *pptr, str, sizeof(str)); 58                              ++pptr; 59                          } 60                     cout<<endl; 61                     break; 62             default: 63                     cout<<"unknown address type/n"; 64                     break; 65     } 66 } 67  68 void NetInformation::getHostServer(const char *name,const char *proto) 69 { 70     hostServer=getservbyname(name,proto); 71 } 72  73 void NetInformation::getHostServer(int port,const char *proto) 74 { 75     hostServer=getservbyport(port,proto); 76 } 77  78 void NetInformation::printHostServer() 79 { 80     if(hostServer!=0) 81     { 82         cout<<"服务名   :"<<hostServer->s_name<<endl; 83  84         char **alisases=hostServer->s_aliases; 85         cout<<"服务别名:"; 86         if(*alisases==0) cout<<"未查询到别名"<<endl; 87         else 88         { 89             while(*alisases) 90             { 91                 cout<<*alisases; 92                 ++alisases; 93             } 94             cout<<endl; 95         } 96         cout<<"端口号:"<<hostServer->s_port<<endl; 97         cout<<"套接字类型:"<<hostServer->s_proto<<endl; 98     } 99 }100 101 void NetInformation::reset()102 {103     hostInformation=0;104     hostServer=0;105 106 }

测试代码:

#include <iostream>#include <unistd.h>#include <netinet/in.h>#include "NetInformation.h"using namespace std;int main(){    NetInformation test;    cout<<"/**<  方式一*/"<<endl;    test.getHostInfoByName();    test.printHostInformation();    cout<<"/**< 方式二 */"<<endl;    test.reset();    test.getHostInfoByAddr();    test.printHostInformation();    cout<<"/**< 方式三 */"<<endl;    test.reset();    test.getHostServer("daytime","tcp");    test.printHostServer();    cout<<"/**< 方式四 */"<<endl;    test.reset();    test.getHostServer(3328,"tcp");    test.printHostServer();    return 0;}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表