版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度版权许可合同for美术作品with权益说明2篇
- 2024年度电力系统升级改造合同
- 2024年度环保材料研发与寄卖合同
- 2024年度品牌知识产权许可合同
- 2024年度四川省农产品采购合同3篇
- 2024年度房地产买卖合同及房产描述
- 2024年度商务代理合同标的及服务描述2篇
- 二零二四年度医疗器械销售与维修合同3篇
- 2024年度网络广告投放协议
- 2024年度融资租赁及购买合同标的
- 产品造型设计基础--形态构成要素、形体的构成ppt课件
- 商业发票模板(INVOICE)
- 《成本管理培训》PPT课件.ppt
- 英语希望之星决赛看图说话小作文.ppt
- 设计开发部诚信因素识别评价表和目标指标方案
- 膝关节韧带损伤PPT课件
- 血液科常用化疗方案(1)
- 工程造价术语标准(共32页)
- 六年级上册精通英语单词句子默写表
- 大连市水资源利用的现状和对策
- 数控车床加工操作过程
评论
0/150
提交评论