前言
在套接字编程中,我们经常使用数字的 IP 地址和端口号进程编程,但是我们平常所熟悉的是一些便于记忆的字符名字,要使这种名字能够为套接字操作函数识别,所以这两者之间必须存在着某种转换关系。本节介绍的是 【主机名 与地址】 和 【服务名 与 端口号】 之间的转换。在 Unix 系统中,可以使用函数 gethostbyname、gethostbyaddr 实现【主机名 与 地址】之间的转换;可以使用函数 getservbyname、getservbyport 实现 【服务名 与 端口号】 之间的转换。但是前面这些函数只适合在 IPv4 域里面,若要在 IPv4 和 IPv6 实现这些功能,则可以使用 getaddrinfo 函数。有关这些函数在套接字编程中的使用可在前面文章查看《基于套接字编程》
主机名 与 地址 之间的转换
gethostbyname 与 gethostbyaddr 函数
/* 主机名与地址之间转换 */
/*
* 函数功能:主机名与地址之间转换;
* 返回值:若成功则返回主机结构指针,若出错则返回NULL;
* 函数原型:
*/
#include <netdb.h>
struct hostent *gethostbyname(const char *hostname);//将主机名转换为数字地址;
struct hostent *gethostaddr(const char *addr, size_t len, int family);//将数字地址转换为主机名;
/* 函数功能:获取主机信息;
* 函数原型:
*/
struct hostent *gethostent(void);/* 获取主机信息,并返回hostent结构指针 */
void sethostent(int stayopen);/* 设置主机信息 */
void endhostent(void);
/*
* 说明:
* 若主机数据文件没有打开,gethostent会打开它,该函数返回文件的下一条目;
* 函数sethostent会打开文件,若文件已打开,那么将其回绕;
* 函数endhostent将关闭文件;
* 其中hostent结构至少包含如下成员数据:
*/
struct hostent
{
char *h_name; /* official name of host */
char **h_aliases; /* pointer to alternate host name ar