因为 TCP 本身是无边界的协议,因此它并没有结束标志,也无法分包. socket和文件不一样,从文件中读,读到末尾就到达流的结尾了,所以会返回-1或null,循环结束,但是socket是连接两个主机的桥梁,一端无法知道另一端到底还有没有数据要传输. socket如果不关闭的话,read之类的阻塞函数会一直等待它发送数据,就是所谓的阻塞. 如果发送的东西非常多必须要用循环读,可以有以下解决方案: 调用socket的 shutdownOutput 方法(Java)关闭输出流,该方法的文档说明为,将…