关于名称与地址族.ppt_第1页
关于名称与地址族.ppt_第2页
关于名称与地址族.ppt_第3页
关于名称与地址族.ppt_第4页
关于名称与地址族.ppt_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章,关于名称和地址族,通信应用软件设计,2,目标,掌握DNS的基本概念 掌握编写通用的名字地址的TCP程序 掌握通过名字获取本机IP的方法。,3,将名字映射到数字(1),利用点或冒号分隔的数字串标识端点对用户不是非常友好 主机的Internet地址被绑定到它连接到的网络的某个部分。如果主机移到另一个网络或者改变Internet服务提供商(ISP),它的Internet地址一般不得不改变。 事实上我们更容易记住像这样的名字。,4,将名字映射到数字(2),Sockets API的大多数实现允许访问把名称映射到其他信息(包括Internet地址)的名称服务。 名称服务并不是使TCP/IP工作所必

2、须的。 主机命名服务的两个主要来源是DNS(Domain Name System)和本地配置数据库。,5,DNS,DNS是一种分布式数据库,用于把像这样的域名映射到Internet地址以及其他信息 DNS协议允许连接到Internet的主机使用TCP或UDP从该数据库中检索信息。 本地配置数据库一般是用于名称-Internet地址映射的特定于操作系统的机制。 对程序员来说,名称服务的实现细节不用关心,只要调用相关的API函数就可以了。,6,访问名称服务,用于名称服务的首选接口是函数getaddrinfo()函数,int getaddrinfo(const char *hostStr,const

3、 char *serviceStr, const struct addrinfo *hints, struct addrinfo *results),7,GetAddrInfo.c,#include #include #include #include #include Practical.h int main(int argc, char *argv) if (argc != 3) DieWithUserMessage(Parameter(s), ); char *addrString = argv1; / Server address/name char *portString = arg

4、v2; / Server port/service,8,struct addrinfo addrCriteria; memset(,9,for (struct addrinfo *addr = addrList; addr != NULL; addr = addr-ai_next) PrintSocketAddress(addr-ai_addr, stdout); fputc(n, stdout); freeaddrinfo(addrList); / Free addrinfo allocated in getaddrinfo() exit(0); ,10,运行结果,11,addrinfo结构

5、体,struct addrinfo int ai_flags; /* Input flags. */ int ai_family;/* Protocol family for socket. */ int ai_socktype;/* Socket type. */ int ai_protocol;/* Protocol for socket. */ socklen_t ai_addrlen; /* Length of socket address. */ struct sockaddr *ai_addr;/* Socket address for socket. */ char *ai_ca

6、nonname;/* Canonical name for service location. */ struct addrinfo *ai_next;/* Pointer to next in list. */ ;,12,详细信息,getaddrinfo()是一个“瑞士军刀”类型的函数 第三个参数addrinfo结构告诉系统调用者对哪一类端点感兴趣。 ai_flags的取值 AI_PASSIVE AI_CANONNAME AI_NUMERICHOST AI_ADDRCONFIG AI_V4MAPPED,13,编写地址通用的代码,void PrintSocketAddress(const st

7、ruct sockaddr *address, FILE *stream) if (address = NULL | stream = NULL) return; void *numericAddress; char addrBufferINET6_ADDRSTRLEN; in_port_t port;,14,switch (address-sa_family) case AF_INET: numericAddress = ,15,if (inet_ntop(address-sa_family, numericAddress, addrBuffer, sizeof(addrBuffer) =

8、NULL) fputs(invalid address, stream); / Unable to convert else fprintf(stream, %s, addrBuffer); if (port != 0) / Zero not valid in any socket addr fprintf(stream, -%u, port); ,16,通用的TCP客户,程序包括下列文件 TCPClientUtility.c TCPEchoClient.c,17,通用的TCP服务器,程序包括下列文件 TCPServerUtility.c TCPEchoServer.c,18,IPv4与IPv6之间互操作,问题:如果一方使用IPv4而另一方使用IPv6,则会如何? 如果(并且仅当)使用IPv6的程序是双栈系统时-即同时支持版本4和版本6,它们应该能够互操作。特殊的“v4-v6映射”地址类使之成为可能。,19,从数字获取名称,反过来知道Internet数字地址可以获得名称 int getnameinfo(const struct sockaddr *address, socklen_t addressLength, char *node, socklen_t nodeLength, char *se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论