人生第一次写博客哈哈哈,一直都在看别人的也学到了很多,今天遇到了一个很棘手的问题最后在老师的帮助下解决了。记录一下,有不对的地方还请各位大牛指出。

   这个学期刚刚学完计算机网络,假期的时候就有两周实验课。今天做的是使用Socket编写一个Http服务器和客户端。功能要能进行客户端从服务器下载数据。大部分代码我上午就已经打完了,但是下午在调试的时候碰到一个很奇怪的问题。

java socket 怎么判断断线_java

  这是一段客户端向服务器发起下载请求并成功之后下载文件的代码,讲道理是写的没有问题的,但是就是走不下去,deBug发现卡在了第96行,更神奇的是有时候96行也能运行下去,但是又卡在了100行。我刚开始以为是自己服务器内边数据发送有问题(后来发现确实有一点小小的问题,但96行运行不下去不是服务器的锅),就是数据没发过来,所以96行一直在等,但服务器内边调试发现完美运行,我和基友调了好久也没发现问题在哪,最后去问的老师。哇!老师是真的溜!一下就看出来我这是BufferReader和InputStream混用导致的。说了好多废话啊哈哈哈。

  原因就是我的客户端之前在获取服务器返回响应的时候使用的是BufferReader,而在下载文件的时候用的是InputStream。BufferReader是以缓存为基础的,它很可能在缓存中预读一些Socket中的数据,再加上我传输的文件比较小,只有四个字节,所以经常被BufferReader读到缓存里了,等到我的InputStream再读文件的时候Scoket里就什么都没有了,所以才会卡在read内一行。有的时候没有读到缓存里,就可以继续执行,卡在100行是因为我服务器内边的流忘记关了。。。