Linux网络编程 (获取ip地址 gethostbyname)

#include<stdio.h>
#include<sys/socket.h>
#include<sys/types.h>
#include<netdb.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>
int main(int argc,char *argv[])
{
    struct hostent *h;
    if(argc!=2)
    {/*检查命令行*/
        fprintf(stderr,"usage:getipaddress");
        exit(1);
    }
    if((h=gethostbyname(argv[1]))==NULL)
    {
        herror("gethostbyname\n");
        exit(2);
    }
    printf("hostname is %s\n",h->h_name);

    printf("ip changed %s\n",inet_ntoa( *((struct in_addr*)h->h_addr) )      );
    return 0;
}

需要使用的结构体

struct in_addr {
    __be32  s_addr;
};   //ip地址


struct hostent *gethostbyname(const char *name);
 //这个函数的传入值是域名或者主机名,例如"www.google.cn"等等。
 //传出值,是一个hostent的结构。如果函数调用失败,将返回NULL。
 //所在头文件<sys/socket.h>

struct hostent{
    char * h_name;
    char ** h_aliases;
    short h_addrtype;
    short h_length;
    char ** h_addr_list;
};    //主机信息
#define h_addr h_addr_list[0]


char *inet_ntoa (struct in_addr);
//返回点分十进制的字符串在静态内存中的指针。
//所在头文件:<arpa/inet.h>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值