《关于名称与地址族》PPT课件.ppt

上传人:tia****nde 文档编号:12944574 上传时间:2020-06-04 格式:PPT 页数:19 大小:282.50KB
返回 下载 相关 举报
《关于名称与地址族》PPT课件.ppt_第1页
第1页 / 共19页
《关于名称与地址族》PPT课件.ppt_第2页
第2页 / 共19页
《关于名称与地址族》PPT课件.ppt_第3页
第3页 / 共19页
点击查看更多>>
资源描述
第三章,关于名称和地址族,通信应用软件设计,2,目标,掌握DNS的基本概念掌握编写通用的名字地址的TCP程序掌握通过名字获取本机IP的方法。,3,将名字映射到数字(1),利用点或冒号分隔的数字串标识端点对用户不是非常友好主机的Internet地址被绑定到它连接到的网络的某个部分。如果主机移到另一个网络或者改变Internet服务提供商(ISP),它的Internet地址一般不得不改变。事实上我们更容易记住像这样的名字。,4,将名字映射到数字(2),SocketsAPI的大多数实现允许访问把名称映射到其他信息(包括Internet地址)的名称服务。名称服务并不是使TCP/IP工作所必须的。主机命名服务的两个主要来源是DNS(DomainNameSystem)和本地配置数据库。,5,DNS,DNS是一种分布式数据库,用于把像这样的域名映射到Internet地址以及其他信息DNS协议允许连接到Internet的主机使用TCP或UDP从该数据库中检索信息。本地配置数据库一般是用于名称-Internet地址映射的特定于操作系统的机制。对程序员来说,名称服务的实现细节不用关心,只要调用相关的API函数就可以了。,6,访问名称服务,用于名称服务的首选接口是函数getaddrinfo()函数,intgetaddrinfo(constchar*hostStr,constchar*serviceStr,conststructaddrinfo*hints,structaddrinfo*results),7,GetAddrInfo.c,#include#include#include#include#includePractical.hintmain(intargc,char*argv)if(argc!=3)DieWithUserMessage(Parameter(s),);char*addrString=argv1;/Serveraddress/namechar*portString=argv2;/Serverport/service,8,structaddrinfoaddrCriteria;memset(,9,for(structaddrinfo*addr=addrList;addr!=NULL;addr=addr-ai_next)PrintSocketAddress(addr-ai_addr,stdout);fputc(n,stdout);freeaddrinfo(addrList);/Freeaddrinfoallocatedingetaddrinfo()exit(0);,10,运行结果,11,addrinfo结构体,structaddrinfointai_flags;/*Inputflags.*/intai_family;/*Protocolfamilyforsocket.*/intai_socktype;/*Sockettype.*/intai_protocol;/*Protocolforsocket.*/socklen_tai_addrlen;/*Lengthofsocketaddress.*/structsockaddr*ai_addr;/*Socketaddressforsocket.*/char*ai_canonname;/*Canonicalnameforservicelocation.*/structaddrinfo*ai_next;/*Pointertonextinlist.*/;,12,详细信息,getaddrinfo()是一个“瑞士军刀”类型的函数第三个参数addrinfo结构告诉系统调用者对哪一类端点感兴趣。ai_flags的取值AI_PASSIVEAI_CANONNAMEAI_NUMERICHOSTAI_ADDRCONFIGAI_V4MAPPED,13,编写地址通用的代码,voidPrintSocketAddress(conststructsockaddr*address,FILE*stream)if(address=NULL|stream=NULL)return;void*numericAddress;charaddrBufferINET6_ADDRSTRLEN;in_port_tport;,14,switch(address-sa_family)caseAF_INET:numericAddress=,15,if(inet_ntop(address-sa_family,numericAddress,addrBuffer,sizeof(addrBuffer)=NULL)fputs(invalidaddress,stream);/Unabletoconvertelsefprintf(stream,%s,addrBuffer);if(port!=0)/Zeronotvalidinanysocketaddrfprintf(stream,-%u,port);,16,通用的TCP客户,程序包括下列文件TCPClientUtility.cTCPEchoClient.c,17,通用的TCP服务器,程序包括下列文件TCPServerUtility.cTCPEchoServer.c,18,IPv4与IPv6之间互操作,问题:如果一方使用IPv4而另一方使用IPv6,则会如何?如果(并且仅当)使用IPv6的程序是双栈系统时-即同时支持版本4和版本6,它们应该能够互操作。特殊的“v4-v6映射”地址类使之成为可能。,19,从数字获取名称,反过来知道Internet数字地址可以获得名称intgetnameinfo(conststructsockaddr*address,socklen_taddressLength,char*node,socklen_tnodeLength,char*service,socklen_tserviceLength,intflags)如何程序需要获取它自己的主机名称,可以使用更简洁的函数gethostname()intgethostname(char*nameBuffer,size_tbufferLength),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!