这个程序有一个缺陷就是我没有办法给出反馈,不知道怎么回事,修改一点点东西就会导致图片文件上传的时候只上传了一部分
//客户端代码
/*
读取一个图片数据
客户端读取文件的数据 把数据发送给服务器 并接收服务器的反馈
*/
public static void main(String[] args) throws IOException {
//创建客户端的socket对象
Socket socket = new Socket("192.168.0.109",10086);
//创建文件的读取流 创建字节缓冲流对象
//创建字符输入流对象
FileInputStream isr = new FileInputStream("C:\\Users\\Administrator\\IdeaProjects\\Day08_thread" +
"\\MyInternet\\src\\TCPdemo5\\baidu.png");
//封装字节输入流 转化为字节缓冲输入流
BufferedInputStream bis =new BufferedInputStream(isr);
//创建socket的输出流 用于发送数据给客户端
OutputStream socket_outstream = socket.getOutputStream();
//封装为字节缓冲输入流
BufferedOutputStream bos = new BufferedOutputStream(socket_outstream);
//开始读取数据 一次读取一个字节
byte by[] = new byte[1024];
int len ;
while ( (len = bis.read(by)) != -1){
//写数据
bos.write(by,0,len);
}
System.out.println(11111);
//释放资源
isr.close();
bos.close();
socket.close();
//这里我们要把socket放在bos后面 不然就会报错
// 更加奇怪的就是 如果你把bos给删除了,不释放这个资源文件就没有复制过去
}
服务端代码
/*
接收客户端发送过来的数据
写入文件
没有办法给出反馈
*/
public static void main(String[] args) throws IOException {
//创建服务端的socket对象
ServerSocket ss = new ServerSocket(10086);
//监听客户端的连接
Socket socket = ss.accept();
//创建socket的字节输入流 并封装
InputStream is = socket.getInputStream();
//封装为字节缓冲流
BufferedInputStream bis = new BufferedInputStream(is);
//创建字节输出流 用于把数据写入文件 OutputStream 是抽象类用它的子类FileOutputStream
FileOutputStream fos = new FileOutputStream("C:\\Users\\Administrator\\IdeaProjects\\Day08_thread" +
"\\MyInternet\\src\\TCPdemo5\\copybaidu.png");
//封装输出流 为字节缓冲输出流
BufferedOutputStream bos = new BufferedOutputStream(fos);
//开始读取数据 一次读取一个字节数组
byte by[] = new byte[1024];
int len ;
while ((len = bis.read(by)) != -1){
//开始向文件写入数据
bos.write(by,0,len);
}
System.out.println(2222222);
//释放资源
ss.close();
bis.close();
bos.close();
}