• linux下的socket编程(2)--获取对方的ip地址


    linux下的C socket编程(2)

    获取域名对应的ip地址

        经过上面的讨论,如果我们要向链接远程的服务器,我们需要知道对方的ip地址,系统函数gethostbyname便能够帮助我们实现这个目的。他能够获取域名对应的ip地址并且返回一个hostent类型的结果。其中包含了ip地址信息,它的头文件是:netdb.h

    1
    2
    3
    4
    5
    6
    7
    8
    struct hostent
    {
    char * h_name;//主机名
    char **h_aliases;//别名列表
    int h_addrtype;//地址类型
    int h_length;//地址的长度
    char **h_addr_list;//地址列表
    }

    其中h_addr_list便是存放ip地址的信息。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<sys/socket.h>
    #include<sys/types.h>
    #include<netdb.h>
     
    int main()
    {
    char *hostname="www.baiidu.com";
    char ip[100];
    struct hostent *host;
    struct in_addr ** addr_list;
    int i;
     
    if(NULL==(host = gethostbyname(hostname)))
    {
    perror("get host by name error ");
    exit(1);
    }
    addr_list= (strut in_addr **)host->h_addr_list;
    for(i=0;addr_list[1]!=NULL;i+=1)
    {
    //inet_ntoa()将long类型的ip地址转化成圆点字符串形式,作用与inet_addr()相反
    strcpy(ip,inet_ntoa(*addr_list[i]));   
    }
    printf("%s resolved to %s ",hostname,ip);
    return 0;
    }

    gethostbuname()用来获取域名对应的ip地址,可以参加gethostbyname()来产看更多的用法。

    从socket连接中获取对方ip:

    由前面能够知道accept()返回的是结构体sockaddr_in,由此很容易得知对方的ip和端口信息。

    1
    2
    char * client_ip = inet_ntoa(client.sin_addr);
    int cilent_port = ntohs(client.sin_port);

    到现在为止,我们已经解除了很多个重要类型。

        1、sockaddr_in 连接信息

        2、in_addr long 类型的ip地址。

        3、sockaddr与sockaddr_in 类似,是通过用socket连接信息。

        4、hostent 域名对应的ip信息。用在gethostbyname。

  • 相关阅读:
    minix中的文件锁
    minix代码中conv2()函数的作用
    ClassView中视图类框架类不见了的解决方法
    minix中的GDT,LDT,IDT和TSS
    MFC dlg窗口按回车(Enter)键和ESC键会退出解决方法
    MongoDB文档、集合、数据库简介
    Windows下MongoDB环境搭建
    【译】RabbitMQ:"Hello World"
    转载 jQuery技巧
    android call webservice by ksoap 实例代码
  • 原文地址:https://www.cnblogs.com/yjds/p/8597336.html
Copyright © 2020-2023  润新知