1. 首页
  2. 课程学习
  3. 嵌入式
  4. 名字地址转化-[完整][中文][vc#][visual.c#.数据库高级教程]

名字地址转化-[完整][中文][vc#][visual.c#.数据库高级教程]

上传者: 2024-07-21 13:30:34上传 PDF文件 14.14MB 热度 3次

名字地址转化通常,使用主机名代表IP地址,这在IPv6中更加简洁。在Linux中,一些函数可以实现主机名和地址的转化,最为常见的有gethostbyname、gethostbyaddr、getaddrinfo等,它们都可以实现IPv4和IPv6地址和主机名的转化。你知道吗?这些函数就像网络世界的翻译官,帮助我们在主机名和IP地址之间自由转换。

gethostbyname是将主机名转化为IP地址,而gethostbyaddr则是相反。再如,getaddrinfo就更强大了,它能识别IPv4和IPv6地址。对于gethostbyname和gethostbyaddr,我们要用到一个叫hostent的结构体,如下所示:


struct hostent {

    const char *h_name; // 正式主机名

    char **h_aliases; // 主机别名

    short h_addrtype; // 地址类型

    short h_length; // 地址长度

    char **h_addr_list; // 指向IP地址的指针数组

};

而getaddrinfo则要用到一个叫addrinfo的结构体:


struct addrinfo {

    int ai_flags;

    int ai_family;

    int ai_socktype;

    int ai_protocol;

    size_t ai_addrlen;

    char * ai_canonname;

    struct sockaddr* ai_addr; // socket结构体

    struct addrinfo* ai_next; // 下一个指针链表

};

gethostbyname函数

  • 所需头文件:#include

  • 函数原型:struct hostnet *gethostbyname(const char *hostname)

  • 返回值:hostent类型指针,出错返回-1

调用该函数可以首先对addrinfo结构体中的h_addrtypeh_length进行设置,若为IPv4则设置AF_INT和4,若为IPv6则设置AF_INET6和16,不设置默认为IPV4。你是否曾想过这些复杂的参数设置背后有多么精密的计算?

getaddrinfo函数

  • 所需头文件:#include

  • 函数原型:int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result)

详细了解这些函数的工作原理,可以参考以下一些资源:

这些资源不仅能让你更好地理解这些函数,还能帮助你更深入地探索IPv4和IPv6的奇妙世界。让我们一起在这个网络的海洋里畅游吧!

用户评论