《网络编程》套接字地址与名字转换

本文探讨了在套接字编程中如何进行主机名与地址、服务名与端口号之间的转换,介绍了Unix系统中如gethostbyname、gethostbyaddr、getservbyname、getservbyport等函数的作用,并提及了适用于IPv4和IPv6的getaddrinfo函数。
摘要由CSDN通过智能技术生成

前言

        在套接字编程中,我们经常使用数字的 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值