socket.shutdownOutput()

韩顺平java网络上传文件部分

运行的错误信息:

img

我的源码如下:

public class TCPFileUploadServer
{
    public static void main(String[] args) throws IOException
    {
        //1.服务端在本机监听8888端口
        ServerSocket serverSocket = new ServerSocket(9999);
        System.out.println("服务端在9999端口监听....");
        //2.等待连接
        Socket socket = serverSocket.accept();

        //3.读取客户端发送的数据
        //通过 Socket 得到输入流
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        byte[] bytes = StreamUtils.streamToByteArray(bis);
        //4.得到 bytes 数组,写入到指定的路径
        String destFilePath="src\\hua2.png";
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFilePath));
        bos.write(bytes);
        bos.close();

        //向客户端回复 "收到图片" 通过 socket 获取到输出流
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        writer.write("收到图片");
        //把内容刷新到数据通道
        writer.flush();
        //设置写入结束标记
        socket.shutdownOutput();

        //关闭其他流
        writer.close();
        bis.close();
        socket.close();
        serverSocket.close();

    }
}
public class TCPFileUploadClient
{
    public static void main(String[] args) throws IOException
    {
        //客户端连接服务端 8888,得到 Socket 对象
        Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
        //创建读取磁盘文件的输入流
        String filePath = "src\\hua.png";
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(filePath));

        //bytes 就是 filePath 对应的字节数组
        byte[] bytes = StreamUtils.streamToByteArray(bis);

        //通过 socket 获取到输出流,将 bytes 数据发送给服务端
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        //将文件对应的字节数组的内容,写入到数据通道
        bos.write(bytes);
        //设置写入数据的结束标记
        socket.shutdownOutput();

        //接受服务端回复的消息
        InputStream inputStream = socket.getInputStream();
        String s = StreamUtils.streamToString(inputStream);
        System.out.println(s);

        //关闭相关的流
        inputStream.close();
        bos.close();
        bis.close();
        socket.close();
    }
}


求解惑!

有点像是socket.close的方法那里有问题