TCP协议利用多线程实现——文件的上传、下载
2020-04-04 07:09
921 查看
文件的上传指的是:客户端将本地的文件发送到服务器端,然后服务器端将接收到的内容存储到本地。
文件的下载即是一个相反的过程:服务器将文件发送给客户端,客户端将接收的文件下载到本地。
上传和下载的过程,方法上没有什么区别。
下面用多线程的方式来实现文件的上传过程。
package zal.demo02_upLoad; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.UUID; @SuppressWarnings("all") public class Demo04ServerThread { public static void main(String[] args) throws IOException { ServerSocket serverSocket=new ServerSocket(1); //创建服务端的步骤不用放到循环中,因为一个服务器就够了 while (true) { Socket socket = serverSocket.accept(); //将读到的数据写到服务器的文件中 Task task=new Task(socket); new Thread(task).start(); } } }
package zal.demo02_upLoad; import java.io.*; import java.net.Socket; public class Demo01Client { public static void main(String[] args) throws IOException { Socket socket=new Socket("192.168.0.108",1); //两个参数,一个是要连接服务器的IP地址,另一个是服务器的端口号 //往服务器里写 OutputStream out = socket.getOutputStream(); FileInputStream fis=new FileInputStream("D:\\Client\\aa.jpg"); byte[] bArr=new byte[1024]; int len; while((len=fis.read(bArr))!=-1){ out.write(bArr,0,len); } //当客户端读取完自己文件中数据时,告诉服务器我已经操作完了,以后再也不会向你写数据了,你也不要等我了 socket.shutdownOutput(); //自己new的流需要手动关闭 fis.close(); //接受服务器发送来的内容(读) InputStream in = socket.getInputStream(); byte[] bytes=new byte[1024]; int leng=in.read(bytes); System.out.println(new String(bytes,0,leng)); socket.close(); } }
package zal.demo02_upLoad; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.UUID; public class Task implements Runnable { Socket socket; public Task(Socket socket){ this.socket=socket; } @Override public void run() { try { InputStream in = socket.getInputStream(); FileOutputStream fos = new FileOutputStream("D:\\Server1\\" + UUID.randomUUID().toString() + ".jpg"); byte[] bytes = new byte[1024]; int len; while ((len = in.read(bytes)) != -1) { fos.write(bytes, 0, len); } fos.close(); //服务器反馈给客户收到信息了 OutputStream out = socket.getOutputStream(); out.write("上传成功".getBytes()); socket.close(); //serverSocket.close(); //serverSocket不能关闭,因为关闭了服务器就不存在了 } catch (IOException e) { e.printStackTrace(); } } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 利用FtpClient实现上传下载及获得文件目录
- 利用WebService实现远程服务器文件的上传和下载
- 利用WebService实现远程服务器文件的上传和下载
- Java中使用多线程实现文件上传和下载
- python paramiko实现多线程远程执行命令、多线程远程上传文件、多线程远程下载文件
- 利用ssh实现服务器文件上传下载
- Android基础4(get、post乱码解决、Asynchttpclient的GET_POST访问网络、上传文件、多线程下载、多线程下载的Android移植、XUtils实现多线程下载)...
- 利用spring 实现文件上传、下载
- JSP利用SmartUpload组件实现文件上传下载
- 利用WCF实现上传下载文件服务
- PHP 利用 Curl Functions 实现多线程抓取网页和下载文件
- javaEE利用地方实现文件的上传和下载
- 利用WebService实现远程服务器文件的上传和下载
- Java利用SFTP实现文件上传与下载
- python实现 利用FTP上传文件、下载文件到服务器
- 利用flex+sevlet+fileupload组件实现文件的上传和下载
- jsp中如何利用jspsmartupload实现文件上传下载功能
- 2014-07-23 利用ASP.NET自带控件实现单文件上传与下载
- Java 利用Apache Commons Net 实现 FTP文件上传下载
- 【前端】利用ajax实现伪文件异步上传下载