问题描述:使用Socket网络编程,使用BufferedInputStream/BufferedOutputStream包装流进行文件发送与接受能够正常启动服务端与客户端,服务端端也能正常接受到客户端发送过来的图片,但服务端在返回信息时爆出了异常:Exception in thread "main" java.net.SocketException: Socket closed,经过漫长的bug之旅终于找到解决方案,就是在发送完之后使用包装流的flush方法刷新了一下即可,这个bug产生的原因是:你在Socket关闭之后仍然尝试发送文件,归根结底就是这个BufferedOutputStream类在半关闭(Socket.shutdownOutput())之前没有将文件发送出去。
这是错误代码,我将刷新方法注释掉了,仅仅使用Socket.shutdownOutput()方法无法将内容发送出去还需要配合刷新:outputStream1.flush();其他类也需要使用刷新将内容给发送出去
BufferedOutputStream outputStream1 = new BufferedOutputStream(socket.getOutputStream());
outputStream1.write("你好".getBytes(StandardCharsets.UTF_8));
// outputStream1.flush();
socket.shutdownOutput();//结束标志
如果你还想了深入解一下退推荐你看一下这两篇文章:socket中如何正确使用BufferedOutputStream,BufferedInputStream