国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
使用GETHOSTBYNAME由域名或主機(jī)名得IP地址
使用這個(gè)東西,首先要包含2個(gè)頭文件:
#include   <netdb.h>
#include   <sys/socket.h>

struct   hostent   *gethostbyname(const   char   *name);
這個(gè)函數(shù)的傳入值是域名或者主機(jī)名,例如 "www.google.com ", "wpc "等等。
傳出值,是一個(gè)hostent的結(jié)構(gòu)(如下)。如果函數(shù)調(diào)用失敗,將返回NULL。

struct   hostent   {
    char     *h_name;
    char     **h_aliases;
    int       h_addrtype;
    int       h_length;
    char     **h_addr_list;
    };
解釋一下這個(gè)結(jié)構(gòu):
其中,
    char   *h_name   表示的是主機(jī)的規(guī)范名。例如www.google.com的規(guī)范名其實(shí)是www.l.google.com。
    char       **h_aliases   表示的是主機(jī)的別名。www.google.com就是google他自己的別名。有的時(shí)候,有的主機(jī)可能有好幾個(gè)別名,這些,其實(shí)都是為了易于用戶記憶而為自己的網(wǎng)站多取的名字。
    int       h_addrtype   表示的是主機(jī)ip地址的類型,到底是ipv4(AF_INET),還是ipv6(AF_INET6)
    int       h_length   表示的是主機(jī)ip地址的長度
    int       **h_addr_lisst   表示的是主機(jī)的ip地址,注意,這個(gè)是以網(wǎng)絡(luò)字節(jié)序存儲的。千萬不要直接用printf帶%s參數(shù)來打這個(gè)東西,會有問題的哇。所以到真正需要打印出這個(gè)IP的話,需要調(diào)用inet_ntop()。

const   char   *inet_ntop(int   af,   const   void   *src,   char   *dst,   socklen_t   cnt)   :
這個(gè)函數(shù),是將類型為af的網(wǎng)絡(luò)地址結(jié)構(gòu)src,轉(zhuǎn)換成主機(jī)序的字符串形式,存放在長度為cnt的字符串中。
這個(gè)函數(shù),其實(shí)就是返回指向dst的一個(gè)指針。如果函數(shù)調(diào)用錯(cuò)誤,返回值是NULL。

 

下面是例程,有詳細(xì)的注釋。

#include   <netdb.h>
#include   <sys/socket.h>

int   main(int   argc,   char   **argv)
{
  char   *ptr,**pptr;
  struct   hostent   *hptr;
  char   str[32];
  /*   取得命令后第一個(gè)參數(shù),即要解析的域名或主機(jī)名   */
  ptr   =   argv[1];
  /*   調(diào)用gethostbyname()。調(diào)用結(jié)果都存在hptr中   */
  if(   (hptr   =   gethostbyname(ptr)   )   ==   NULL   )
  {
    printf( "gethostbyname   error   for   host:%s\n ",   ptr);
    return   0;   /*   如果調(diào)用gethostbyname發(fā)生錯(cuò)誤,返回1   */
  }
  /*   將主機(jī)的規(guī)范名打出來   */
  printf( "official   hostname:%s\n ",hptr-> h_name);
  /*   主機(jī)可能有多個(gè)別名,將所有別名分別打出來   */
  for(pptr   =   hptr-> h_aliases;   *pptr   !=   NULL;   pptr++)
    printf( "     alias:%s\n ",*pptr);
  /*   根據(jù)地址類型,將地址打出來   */
  switch(hptr-> h_addrtype)
  {
    case   AF_INET:
    case   AF_INET6:
      pptr=hptr-> h_addr_list;
      /*   將剛才得到的所有地址都打出來。其中調(diào)用了inet_ntop()函數(shù)   */
      for(;*pptr!=NULL;pptr++)
        printf( "     address:%s\n ",   inet_ntop(hptr-> h_addrtype,   *pptr,   str,   sizeof(str)));
      break;
    default:
      printf( "unknown   address   type\n ");
      break;
  }
  return   0;
}
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
struct hostent結(jié)構(gòu)體
gethostbyname()函數(shù)詳解
如何打印hostent結(jié)構(gòu)體中的所有數(shù)據(jù)
關(guān)于gethostbyname多線程阻塞的處理方法
獲取主機(jī)的IP信息
關(guān)于用gethostbyname得域名(www.baidu.com)的IP問題
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服