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

再见也许再也不再见 2014-01-21 04:35:16
客户端给我发送数据,数据格式为


文件帧头: [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++;

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();


...全文
781 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 yangqiu0928 的回复:
为什么要舍弃之前的数据呢。你这可可以看作是断点续传。希望能帮助你
嗯,现在已经更改成断点续传了,但是遇到了新的问题: 服务端正在接收客户端发送的数据,当数据传输到一半时,突然客户端断线,然后客户端重连,连上之后给服务端发送续传请求,服务端接收到续传请求后,返回准许信息,然后客户端再继续发送数据,客户端会从断开的那个字节开始发送,服务端只需要继续接收就可以了,现在我要实现服务端的代码 这个需要怎么实现
shayebuhui0 2014-01-22
  • 打赏
  • 举报
回复
为什么要舍弃之前的数据呢。你这可可以看作是断点续传。希望能帮助你
  • 打赏
  • 举报
回复
木有人?! 我顶!!

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧