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();
[解决办法]
为什么要舍弃之前的数据呢。你这可可以看作是断点续传。希望能帮助你