- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
UDP中应用多播技术.doc
java中应用多播技术
?
最近看了许多java分布式方面书籍,在这里总结一下,介绍分布式应用中一项重要技术,多播通信,并提供我写的一个利用多播技术开发的简易聊天室程序。
?
多播技术:多播技术并不是java创造的,它在互联网协议这一层已经提供了相当多的支持,任何语言都可以访问此服务,不过java语言提供了一个访问此服务的相对简单的而又与平台无关的标准接口。但是,并不像点对点连接中,接收方可以简单的通过要求发送方重发丢失的数据分组,TCP协议就可以容易地纠正诸如丢包这样的小错误,在多点连接中,这些错误中大多数都不能简单的得到修补。如果在很多接收方中的一个测有收到某个数据分组就不能简单地给所有的接收方重发这个包。虽然TCP协议可以提供一个可靠的服务,但在多播这样的场合,它也无能为力。至于IP多播技术虽然也是基于IP协议的,但它使用的是另外一个不同的传输协议,UDP,UDP协议可以发送单个的数据分组,我们称为数据报,但它并没有提供任何纠错手段。
多播通信是一类特殊的IP地址(D类IP地址)这些IP地址并不和任何主机关联,而是专门为多播通信保留下来的,这些地址范围在224.0.0.1~239.255.255.255这间,其中224.0.0.1~224.0.0.255是留作为多播路由信息使用的。此外,所有其它D类IP地址都可以随便进行通信。
举个例子,互联网上的多媒体会议就是一种多播技术的应用程序。特别是在传输视频数据或是音频数据的场合,偶尔的数据丢失是可以容易克服的,因为这样的场合,当视频数据正在接收端直接播放的时候,后来的数据补足是没有什么用处的。实时通信中经常就是这样的,传输同样的数据到多个接收方,使用多播技术比使用多个点对点连接要更有效率,因为多播技术在一个通信线程上采用广播的方式只发送一次,路由器自身能够决定它们是否需要发送一个多播消息,而关于一个接收方是否登记为一个多播地址这样的信息也可以由路由器去处理,另外,多播消息通常带有一个严格的生存周期,它对应着要通过的路由器数量,例如:如果消息的生存期数据为1,那么这个消息就只能在局域网内部传递,如果这个数值并没有专门的设置,默认是1,因此这样的消息就被限制在局域网内了。
从jdk1.1以后,java.net包中对多播套接字提供了支持,为了给一个多播组发送消息,你必须先为一个合适的端口创建一个多播套接字(MulticastSocket)。
InetAddress group=InetAddress.getByName(“226.1.3.5”);
Int port=6789;
MulticastSocket socket=new MulticastSocket(port);
?
发送方没有必要一定登记到一个组里去就可以简单地往多播地址发送数据,为了做到这一点,它会创建一个DatagramPacket对像,把它赋给一个数据缓存,并使用字节数组来填充后通过准备好的套接字发送出去。
Byte[] buffer= new byte[500];
DatagramPacket datagram=new DatagramPacket(buffer,buffer.length,group,port);
Datagram.setData(new String(“hello world”).getBytes());
socket.send(datagram);
为了接收数据不完全统计报,接收方必须将自己登记到一个组里,这可以通过使用发送方指定端口号来创建MulticastSocket,然后再调用joinGroup()方法将自己加到这个组里完成登记。
int port=6789;
MulticastSocket socket=new MulticastSocket(port);
InetAddress group=InetAddress.getByName(“226.1.3.5”);
socket.joinGroup(group);
接着,接收方就可以等待数据的到来了,实际上,为了不至于阻塞现有应用,这种情况通常需要创建一个专门的线程做无限循环等待,消息是通过字节流传送过来的,为了能够解释数据报中的信息,接收方必须知道要到来的信息数据结构,也就是说,它必须能够从字节流中使用解释过程来重建和发送方一样的数据结构。
while(true){
socket.receive(datagram);
String message=new String(datagram.getData());
System.out.println(“Datagram received from”+datagram.getAddress().getHostAddress()+”saying:”+message);
?
}
使用多
您可能关注的文档
- (中小学信息技术《的版面设计》的活动主题确定与教学方法选择(小学版))请结合自身教学和网培学习.doc
- (介绍)调节性T细胞研究进展.doc
- (倪明)浅析我国空白票据的相关法律制度.doc
- (健康报)医患沟通,不是简单的说话.doc
- (减少使用重复利用循环使用).doc
- (博览)公路路基施工中压实控制的探析.doc
- (参选论文)京沪高速公路沥青路面摊铺与碾压质量的控制.doc
- (四)管理信息系统在制造企业中的应用.doc
- (拟稿)潇湘学院机电工程系“班徽班服班旗系徽系旗系服”设计大赛.doc
- (教育系统)反腐倡廉建设创新做法的调研.doc
- 基于人工智能教育平台的移动应用开发,探讨跨平台兼容性影响因素及优化策略教学研究课题报告.docx
- 高中生物实验:城市热岛效应对城市生态系统服务功能的影响机制教学研究课题报告.docx
- 信息技术行业信息安全法律法规研究及政策建议教学研究课题报告.docx
- 人工智能视角下区域教育评价改革:利益相关者互动与政策支持研究教学研究课题报告.docx
- 6 《垃圾填埋场渗滤液处理与土地资源化利用研究》教学研究课题报告.docx
- 小学音乐与美术教师跨学科协作模式构建:人工智能技术助力教学创新教学研究课题报告.docx
- 《航空航天3D打印技术对航空器装配工艺的创新与效率提升》教学研究课题报告.docx
- 教育扶贫精准化策略研究:人工智能技术在区域教育中的应用与创新教学研究课题报告.docx
- 《区块链技术在电子政务电子档案管理中的数据完整性保障与优化》教学研究课题报告.docx
- 《中医护理情志疗法对癌症患者心理状态和生活质量提升的长期追踪研究》教学研究课题报告.docx
文档评论(0)