java_网络编程之上传文件案例
2024-09-08 06:21:55
初期成果:
客户端:
package FileUpload; import java.io.*; import java.net.Socket; import java.util.Scanner; public class Client { public static void main(String[] args) throws IOException { //1.让用户指定上传文件 System.out.println("请输入需要上传的文件"); Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); File file = new File(s); //2.判断文件是否存在并告知用户 if(!file.exists()){ System.out.println("对不起您指定的文件不村子啊"); return; }else{ //3.创建客户端并绑定服务器IP和端口号 Socket socket = new Socket("127.0.0.1", 8888); //4.使用Socket对象中的方法getOutputStream()获取网络字节输出OutputStream流对象 OutputStream outputStream = socket.getOutputStream(); //5.创建本地字节输入流读取文件 FileInputStream fis = new FileInputStream(file); //6.读取文件并通过网络传送到服务器 byte[] bytes = new byte[1024]; int len = 0; while ((len = fis.read(bytes))!=-1){ outputStream.write(bytes,0,len); } //6.1因为程序会阻塞所以使用shutdownOutput结束输出流 socket.shutdownOutput(); //7.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //8.使用网络字节输入流InputStream对象中的read读取服务器回写的数据 while ((len = is.read(bytes))!=-1){ System.out.println(new String(bytes,0,len)); } //释放资源 socket.close(); fis.close(); } } }
服务器端:
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes))!=-1){ fos.write(bytes,0,len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 serverSocket.close(); socket.close(); } }
第二次:优化服务器一直跑
服务器端:
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //加while while (true){ //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file+"\\"+System.currentTimeMillis()+new Random().nextInt()+".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes))!=-1){ fos.write(bytes,0,len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 socket.close(); fos.close(); } } }
第三次优化:多用户同时上传使用多线程
package FileUpload; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; public class ServerSocketTest { public static void main(String[] args) throws IOException { //1.创建服务器 ServerSocket serverSocket = new ServerSocket(8888); //2.判断服务器文件夹是否存在 File file = new File("E:\\aikang"); if (!file.exists()){ file.mkdirs(); } //加while while (true){ //3.使用ServerSocket对象中的方法accept,获取到请求的客户端对象Socket Socket socket = serverSocket.accept(); //使用多线程 new Thread(new Runnable() { //完成文件上传 @Override public void run() { try {//4.使用Socket对象中的方法getInputStream()获取网络字节输入流InputStream对象 InputStream is = socket.getInputStream(); //5.获取本地输出流对象储存数据 FileOutputStream fos = new FileOutputStream(file + "\\" + System.currentTimeMillis() + new Random().nextInt() + ".jpg"); //6.读取网络输入流对象的数据并输出到硬盘 byte[] bytes = new byte[1024]; int len = 0; while ((len = is.read(bytes)) != -1) { fos.write(bytes, 0, len); } //7.获取网络字节输出流回写给客户端提示 OutputStream os = socket.getOutputStream(); os.write("上传完成".getBytes()); //8.释放资源 socket.close(); fos.close(); }catch (IOException e){ System.out.println(e); } } }).start(); } } }
最新文章
- 你必须知道的Javascript 系列
- 虚拟树Demos\Minimal 简单的例子
- 关于在终端运行rosrun时找不到对应的包的解决方法
- 算法设计和数据结构学习_5(BST&;AVL&;红黑树简单介绍)
- A PHP extension for Facebook's RocksDB
- nginx 的模块及处理流程
- EBS OAF开发中实现參数式弹出窗体
- 关于web标准的理解(转)
- 实用的PHP正则表达式
- linux ubuntu下如何安装并且切换java版本(Unsupported major.minor version 52.0)
- 【转载】彻底弄懂css中单位px和em,rem的区别
- matlab分割背景与物体
- FFT 专题讲解
- HTML5的Rang对象
- 分享几个实用的Chrome扩展程序
- 乘法原理,加法原理,多重集的排列数(多个系列操作穿插的排列数) 进阶指南 洛谷p4778
- 利用原生JS实现网页1920banner图滚动效果
- Android ComponentName的用法
- WordPress后台的文章、分类,媒体,页面,评论,链接等所有信息中显示ID并将ID设置为第一列
- 【转】.NET内存管理、垃圾回收