第十一章 名字和地址转换

struct hostent {

char *h_name;        官方主机名

char **h_aliases;    别名字符串的指针数组

int h_addrtype;        IP地址类型

int h_length;            IP地址长度

char **h_addr_list;    IP地址字符串的指针数组

};

有一个hostent.c的例子,然后我想写一个gethostbyaddr的例子,但是遇到了问题,

描述一下:

#include <stdio.h>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
    char *ptr, **pptr;
    char str[INET_ADDRSTRLEN];
    struct hostent *hptr;
    struct sockaddr_in addr;
    while (-- argc > 0) {
        ptr = * ++argv;
        inet_pton(AF_INET, ptr, &addr.sin_addr);
        if ((hptr = gethostbyaddr(&addr.sin_addr, sizeof(addr.sin_addr), AF_INET)) == NULL) {
             /* 在这里总是查不到?为什么呢? 书中说是in_addr结构的指针,传参应该没错的*/
            printf("gethostbyaddr() error: %s:%s\n", ptr, hstrerror(h_errno));
            continue;
        }
        printf("official hostname: %s\n", hptr->h_name);
        for (pptr = hptr->h_aliases; *pptr != NULL; pptr ++)
            printf("\talias: %s\n", *pptr);
        switch (hptr->h_addrtype) {
        case AF_INET:
            pptr = hptr->h_addr_list;
            for (; *pptr != NULL; pptr ++)
                printf("\taddress: %s\n", inet_ntop(hptr->h_addrtype, *pptr, str, sizeof(str)));
            break;
        default:
            printf("unknown address type\n");
            break;
        }
    }
    return 0;
}

为什么每次都是:

gethostbyaddr() error: 119.75.217.109:Unknown host

这个问题我先放下了,继续看后面的:

struct servent {

char *s_name;        //    官方服务名称

char **s_aliases;    //    别名

int s_port;            //    端口号,还是网络字节序的,这个是这个结构里最重要的东西了

char *s_proto;    //    服务使用的协议

};

struct servent *getservbyport(int port, const char *protoname);

这个函数中port依然要求是网络字节序的,填写时需要使用htons()来转换。

接下来又有一个例子,是传入主机名和服务名来显示时间的,这个我用www.baidu.com还有www.google.com都是不行,

他们都是不开启这个功能的,我用的是RedHat6.3server系统,所以在root权限下,使用ntsys命令,可以打开开启

各种服务的选项,把daytime-dgram和daytime-stream启用就可以了,直接试自己的IP地址来测试就行了。

时间: 2024-10-31 01:14:29

第十一章 名字和地址转换的相关文章

UNIX网络编程卷一:第十一章 名字与地址转换

名字和数值地址间的转换函数(IPV4): gethostbyname gethostbyaddr 服务名字和端口号之间转换: getservbyname getservbyport 协议无关函数: getaddrinfo  : 主机名字和IP之间的转换 getnameinfo : 服务名字和端口号 实践代码:https://github.com/huntinux/unpvol1/tree/master/11chp

Unix网络编程学习笔记之第11章 名字与地址转换

一. 域名系统(DNS) 1. 简介 DNS主要用于主机名和IP地址之间的映射. 主机名可以是简单的名字ljm,也可以是全限定域名ljm.localdomainbaidu.com等. 2.资源记录 DNS中的条目称为资源记录(RR).我们感兴趣的RR类型只有几个: A             A记录把一个主机名映射为一个32位的IPv4地址. AAAA    4A记录把一个主机名映射为一个128位的IPv6地址. 例如: ljm               IN      A    127.0.

UNP第11章——名字与地址转换

1.域名系统 程序中只使用主机名和服务名的好处是,如果IP或端口变化,只需要改变映射关系,不需要重新编译程序. 1.1 资源记录 DNS的条目为资源记录,有用的项如下: A IPv4地址 AAAA IPv6地址 CNAME 规范名字 如: ftp.unpbook.com 的 CNAME 为 linux.unpbook.com www.unpbook.com 的 CNAME 为 linux.unpbook.com 1.2 解析器和名字服务器 程序通过调用解析器库函数,调用DNS服务.常用的函数为

sockets: DNS库函数的名字与地址转换

########################################################### DNS库函数的名字与地址转换 ###################################################### 通常给出的是数值地址(也就是IP地址),不方便记忆: 域名系统(DNS):用于在主机名字和IP地址之间的映射. /etc/resolv.conf包含本地名字服务器主机的IP地址. 获取名字和地址信息的方法: 1.使用DNS 2.静态主机文件

名字与地址转换getservbyname 与 getservbyport函数

名字与地址转换getservbyname 与 getservbyport函数 服务也通常靠名字来标志,getservbyname函数用于根据给定名字查找相应服务. #includestruct    servent *getservbyname( const char *servname, const char *protoname );成功:返回servent类型非空指针:失败:空指针:本函数返回非空指针 struct    servent{      char      *s_name;  

apue和unp的学习之旅11——名字与数值地址转换

//-------------------------------------1.为什么使用名字好----------------------------------------- 我们应该使用名字而不是数值来标识主机(例如数值206.6.226.33),服务器(例如端口13代表标准的daytime服务器),然而出于以下几个理由,我们应该使用名字而不是数值: 1).名字好记住 2).数值地址可以变动而名字保持不变 3).随着往IPv6上转移,数值地址变得相当长,手工键入地址很容易出错. //--

[CSAPP笔记][第十一章网络编程]

第十一章 网络编程 我们需要理解基本的客户端-服务端编程模型,以及如何编写使用因特网提供的服务的客户端-服务端程序. 最后,我们将把所有这些概念结合起来,开发一个小的但功能齐全的Web服务器,能够为真实的Web浏览器提供静态的和动态的文本和图形内容. 11.1 客户端 - 服务器编程模型 每个网络应用程序都是基于客户端 - 服务器模型的 采用这种模型,一个应用是由一个服务器进程 和一个或多个客户端进程组成. 服务器管理某种资源,并且通过操作这种资源为它的客户端提供某种服务. WEB服务器,代表客

zabbix专题:第十一章 zabbix proxy分布式监控配置

zabbix专题:第十一章 zabbix proxy分布式监控配置             对Linux有兴趣的朋友加入QQ群:476794643 在线交流 本文防盗链:http://zhang789.blog.51cto.co zabbix proxy分布式监控配置 zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix proxy可以非常简便的实现了集中式.分

第十一章 执行查询算法

第十一章      执行查询算法 基本概念: 三类查找方法:线性查找.树形查找.哈希表查找 动态查找表:在查找的同时,对表做修改操作(如插入和删除),则相应的表称为动态查找表 静态查找表:与动态查找表相反 查找过程中对关键字需要执行的平均比较次数(也称平均比较长度作为衡量一个查找算法优劣的标准 平均比较长度: 其中:n是结点的个数:pi是查找第i个结点的概率.若不特别申明,认为每个结点的查找概率相等,都为1/n:ci是找到第i个结点所需进行的比较次数. 线性查找: 基本思想:从表的一端开始,顺序