Linux教程

Linux网络编程C语言域名解析

本文主要是介绍Linux网络编程C语言域名解析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

视频连接

head

<iframe frameborder="no" height="600" scrolling="no" src="//player.bilibili.com/player.html?aid=209596352&bvid=BV13h411x7j6&cid=454622332&page=1" width="95%"></iframe>

end

/******* 域名解析 **************************
 * 函数名:struct hostent *gethostbyname(const char *name);
 * 功能:域名解析
 * 参数:
 *    const char *name:域名或者ip
 * 返回值:struct hostent *
 *      成功:返回数据结构体
 *      失败:NULL
 * ***************************************/

/********释放解析后的数据空间******************
 * 函数名:void endhostent(void);
 * 功能:释放gethostbyname函数申请的空间
 * 参数:无
 * 返回值:无
 * ****************************************/

#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char *argv[])
{
    if (argc != 3)
    {
        printf("参数错误:./程序名称 ip地址或者域名 端口号\n");
        return 0;
    }

    for (int i = 0; i < argc; i++)
    {
        printf("参数[%d] = %s\n", i, argv[i]);
    }

    printf("打印解析数据:\n");

    struct hostent *hs = gethostbyname(argv[1]);
    if (hs == NULL)
    {
        perror("获取失败:");
        exit(0);
    }

    char *ip = NULL;
    //将网络大端字节序的ip转为字符点分形式
    ip = inet_ntoa(*(struct in_addr *)hs->h_addr_list[0]);
    //输出ip地址
    printf("ip地址:%s\n", ip);

    //释放我转换的数据信息
    endhostent();
    return 0;
}

// struct hostent   //只支持IPv4
// {
//     char *h_name;       /* 主机正式名称 */
//     char **h_aliases;   /* 别名列表 */
//     int h_addrtype;     /* 主机地址类型 */
//     int h_length;       /* 地址的长度 */
//     char **h_addr_list; /* 地址列表 */
// }
//#define h_addr h_addr_list[0] /* 为了向后兼容 */

 

这篇关于Linux网络编程C语言域名解析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!