首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

java socket数据传输过程中 中断,重连后继续传输的有关问题

2014-01-25 
java socket数据传输过程中 中断,重连后继续传输的问题客户端给我发送数据,数据格式为文件帧头:[color#FF

java socket数据传输过程中 中断,重连后继续传输的问题
客户端给我发送数据,数据格式为


文件帧头:  [color=#FF00FF]识别流      ---------->  “B_anlilianPic”
           开始/结束时间 ---------> time_t beginTime (4字节)
                        --------->  time_t endTime (4字节)
            //  图片个数  ---------> u32  totalPicNum (4字节)
间隔符  ‘##$##’
照片流水号(范围:0-9999)--------> u16 PicSerialNum  (2字节)
学员ID(18位身份证号)  --------> char TraineeID[20]  (20字节)
驾驶员ID(18位身份证号)-------->  char DriverID[20] (20字节)
GPS数据(时间、位置、速度)
char utc_position[16];    //utc time161229.487 hhmmss.sss char latitude[16];    //3723.2475  ddmm.mmmm 
u8 n_s_indicator;    //N    N: north ; S: south
char longitude[16];    //12158.3416  dddmm.mmmm
u8 e_w_indicator;    //W    E: east ; W: west
    char speed_over_ground[16];    //相对速度
int date;//日期
行驶时间数据(范围:0-65535,单位:秒)          u32 driveTime
行驶里程数据(范围:0-65535,单位:0.01公里)char MileageCount[20] 
照片数据   照片大小   -------------.>    u32  PicSize;
           照片数据 PicSize大小
间隔符(第二张照片)
.
.
.
.
识别流      ---------->  “E_anlilianPic”[/color]




网络异常中断后,客户端自动重连,如果中断之前正在发送第二张照片的数据,那么重新连接后,会从第二张照片的开始部分发送,但是服务端(我写的)已经接收过之前的数据了,我怎么舍弃掉之前的数据,重新从第二张照片数据的头位置接收


下面是我接收端的代码:

(顺带问一下,bufIn.read()这个方法是返回-1么)



InputStream bufIn=clientSocket.getInputStream();
    
  //将输入写入到指定文件
  long start = System.nanoTime();
  
  byte buf[]=new byte[10240];
  
//  ByteBuffer buffer = ByteBuffer.wrap( buf );
  
  int len=0;
  
  String url = Createfile.url; 
  FileOutputStream fw=new FileOutputStream(url);
  
  //定义写入缓冲区
  System.out.println("正在接收数据...");
  
//  long start  = System.currentTimeMillis();
  int a =0;
  int count = 0;
  try
  {
  clientSocket.setSoTimeout(20000);
    
  while((len=bufIn.read(buf))!=-1)
  
  {  
  
   a=1;  
   fw.write(buf, 0, len);
   fw.flush();

   }
   
  
   count++;
   
   System.gc();
  }
  
  System.out.println();
  
  }catch (Exception e) {
  
  System.err.println("!!!超时!!!");
}  
  
long end =System.nanoTime(); 

if(a==0){
System.out.println("没有接收到数据");
}else{

Test test = new Test();
count = test.count(url, "##$##");

System.err.println("用时:"+(end-start)/1000000000+"s");

System.out.println("共接收"+count+"张照片");

}

ReceiveData_3.is.close();
ReturnData_6.outputStream.close();
fw.close();
bufIn.close();
ListenPort_1.count--;

System.out.println("------------------已释放资源------------------");

clientSocket.close();



[解决办法]
为什么要舍弃之前的数据呢。你这可可以看作是断点续传。希望能帮助你

热点排行