hostent 和in_addr结构

   今天在要获取主机IP地址时,大概步骤记得是调用gethostname() 和gethostbyname(),但是当用gethostbyname得到hostent这个结构的一个指针时,却不知道该咋办了。忘了这个结构都有哪些成员了。失败

  struct hostent

   {

       char *h_name;                    //主机的正式名称

       char **h_aliases;                //主机的别名,一个主机可以有多个别名

所以用了字符串指针。

       int h_addrtype;                  //主机地址类型一般为2表示是AF_INET

       int h_length;                    //地址长度,32位地址长度为4个字节

       char **h_addr_list;              //存储主机地址的数组。此处要注意的是该成员可以存储多个IP地址,即如其名称所言,地址列表。当获取到hostent结构指针后,要读取地址信息。应该使用

      强制转换为in_addr*再使用。我刚开始使用的时候以为每个h_addr_list[i]就是一个地址列表的字符,结果得到的不是自己想要的。

       #define h_addr h_addr_list[0]    //为向后兼容

};

而上面的in_addr结构,在写代码的时候很少使用到,in_addr其实就是一个32位的网络字节序地址。

 

 

下面是一个测试代码,麻雀虽小,五脏俱全,还是能够实现获取主机IP的功能的:

struct in_addr {
  union {
          struct { u_char s_b1,s_b2,s_b3,s_b4; }   S_un_b;
          struct { u_short s_w1,s_w2; }            S_un_w;
          u_long                                   S_addr;
  } S_un;//该联合结构使对结构访问方便.多种方式访问结构.
};
下面是一个列子代码:
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值