Java数据报之失序与丢包.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java数据报之失序和丢包  习惯了TCP编程,认为UDP可以包办这些问题是错误的。一个UDP应用程序要承担可靠性方面的全部工作,包括报文的丢失、重复、时延、乱序以及连接失效等问题。   通常我们在可靠性好,传输时延小的局域网上开发测试,一些问题不容易暴露,但在大型互联网上却会出现错误。   UDP协议把递送的可靠性责任推到了上层即应用层,下面简单编写了几个类来专门处理两个问题:乱序和丢包。   四个类:DataPacket 类,PacketHeader类,PacketBody类 ,DataEntry类,位于同一个文件DataPacket .java中。   DataPacket 类相当于一个门面模式,提供给外部使用,通信数据也在这个类中处理。   package com.skysoft.pcks;   import java.io.*;   import java.net.*;   import java.util.*;   public class?DataPacket {   OutputStream os;   PacketHeader header;   PacketBody body;   ArrayList al;    public static final int DataSwapSize = 64532;   /** ?  * 在接收数据报使用 ?  */   public DataPacket() {   header = new PacketHeader();   body = new PacketBody();   al = new ArrayList();  ?}   /**   * 在发送数据报时使用,它调用报文分割操作.   * @param file String?硬盘文件   */   public DataPacket(String file) {   this();   try {   is = new FileInputStream(file);   header.CalcHeaderInfo(is.available());   this.madeBody();   is.close();   //this.Gereratedata();   }   catch (FileNotFoundException ex) {    ex.printStackTrace(); ?  }   catch (IOException ex1) {   ex1.printStackTrace(); ? ??}   }  ?/**   * 在发送数据报时使用,它调用报文分割操作.   * @param url URL url地址   */   public DataPacket(URL url) {   this();   try {    //is = url.openStream();   URLConnection conn=url.openConnection();   is=conn.getInputStream();   int total=conn.getContentLength();   header.CalcHeaderInfo(total);   this.madeBody();    //System.out.println(total+:+total);    is.close(); ? ??}   catch (IOException ex) {   ex.printStackTrace();   }    } ? /** ?  * 为发送构造分组,使用PackageHeader处理了报头格式,并为分组编序号.  ?*/   private void madeBody() {   al.clear();   byte[] buffer;   DataEntry de;   for (int i = 0; i ?header.fragmentcounter; i++) {   try {   ByteArrayOutputStream bos = new ByteArrayOutputStream();   //is.skip(i * body.BODY_BUFFER_SIZE);   header.ArrageSort(i);   de = new DataEntry(PacketBody.BODY_BUFFER_SIZE);   de.setSn(i);   de.setStreamsize(header.getStreamsize());   de.setFragmentcounter(header.getFragmentcounter());   if (heade

文档评论(0)

youyang99 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档