日期:2014-05-18  浏览次数:20874 次

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 time 161229.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++;
&nb