zoukankan      html  css  js  c++  java
  • 封装获取网络信息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
    ";
     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;
    }
  • 相关阅读:
    FarPoint FpSpread控件的使用收藏
    在Oracle中使用Guid
    oracle 语句的妙用例子
    让服务器iis支持.apk文件下载的设置方法
    oracle 自动生存清库脚本
    winform 消息通讯组件实习
    在css中使用边框做三角形
    JavaScript闭包和ajax
    JavaScript面向对象
    正则表达式
  • 原文地址:https://www.cnblogs.com/orangebook/p/3560617.html
Copyright © 2011-2022 走看看