韩顺平java网络上传文件部分
运行的错误信息:
我的源码如下:
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的方法那里有问题