java file 堵塞_JAVA socket传送文件一直被阻塞

我写了一个简单的JAVAsocket传送文件的程序如下:客户端:System.out.println("filedownloadstarts.");FilefDir=newFile("./downloads");Filefile=newFile(fDir,"abc.txt");BufferedO...

我写了一个简单的JAVA socket传送文件的程序如下:

客户端:

System.out.println("file download starts.");

File fDir = new File("./downloads");

File file = new File(fDir, "abc.txt");

BufferedOutputStream bufr = new BufferedOutputStream(new FileOutputStream(file));

byte[] line = new byte[102400];

int chunkSize;

while((chunkSize = in.read(line))!= -1){

bufr.write(line, 0, chunkSize);

bufr.flush();

Thread.sleep(10);

}

bufr.close();

System.out.println("file download completes");

服务器端:

File file = new File(fDir, fileName);

BufferedInputStream buffile = new BufferedInputStream(new FileInputStream(file));

byte[] line = new byte[102400];

int chunkSize;

System.out.println("file transmission start.");

while ((chunkSize = buffile.read(line)) != -1) {

out.write(line, 0, chunkSize);

Thread.sleep(10);

}

buffile.close();

System.out.println("file transmission complete.");

结果服务器端可以正常打印出"file transmission complete.",但是客户端程序总会进入死循环。

看起来好像是因为read是阻塞方法,但是始终接收不到服务器端发来的文件结束符

于是就卡在了chunkSize = in.read(line))!= -1这条语句一样。

而当我把程序强行结束掉,客户端下载的文件就立即出现在硬盘里了,而且无任何损坏。看起来客户端已经成功的接受了文件的所有部件,就是因为阻塞方法read不能返回-1而导致一直卡在那不动。

不知道我这两段代码有什么错误,导致了这种奇怪的阻塞,求教啊!!谢谢

但是read方法本身不就有告知客户端文件传送结束的功能么 当读到文件结束符的时候它会返回-1的啊

展开

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值