JAVA 如何判断文件接收完成

来源:百度知道 编辑:UC知道 时间:2024/09/22 10:09:28
我用Socket类做了服务端和客户端,服务端发送文件给客户端。服务端我知道通过输出流读文件数据返回-1可知道文件已经读完了,但是客户端接收文件这里要怎么知道服务端这里文件已经发送完毕了呢?

这个是服务端发送文件的代码
while(num!=(-1))//是否读完文件
{
bos.write(buf2,0,num);//把文件数据写出网络缓冲区
bos.flush();//刷新缓冲区把数据写往客户端
num=fos.read(buf2);//继续从文件中读取数据

这个是客户端的
while(over)//是否读完所有数据
{
raf.write(buf2,0,num);//将数据写往文件
raf.skipBytes(num);//顺序写文件字节
num=bis.read(buf2);//继续从网络中读取文件

约定发文件前先发一个文件长度就行了阿。

服务器端发送文件最后,发送一个结束标识。

num = -1 说明结束了
可以用一下形式
while(bis.read(buf2)!=-1)
{
//处理数据
}

一般来说发送一个结束标示符是最简单的,可是有时候,你发送的内容中包含了你的结束表示符,所以最好是在发送钱先得到要发送文件的长度,然后在客户接收端得到接收到文件的长度,做一个对比,如果相同,则文件发送完毕!

1、关闭Socket
2、事先约定文件长度
3、设置超时时间
4、发送结束标志