日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件秒传

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件秒传 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

ClientFiles.java

/*** 更多資料歡迎瀏覽凱哥學堂官網:http://kaige123.com* @author 小沫*/ package com.files.mc;import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException;public class ClientFiles extends Thread {public void run() {try {Socket socket = new Socket("127.0.0.1", 8080);InputStream fin = socket.getInputStream();OutputStream fout = socket.getOutputStream();File file = new File("E:/迅雷下載/170322-04.mp4");long times = System.currentTimeMillis();System.out.println("\t正在校驗 " + file.getName() + "文件MD5請稍后...\n");String md5 = MD5FileUtil.getFileMD5String(file);// 把此文件數據進行MD5加密System.out.println("[MD5驗證完畢 耗時: " + (System.currentTimeMillis() - times) / 1000 + " 秒 正在執行數據傳輸]\n");fout.write(md5.getBytes());// 把加密出來的MD5發送到服務端fout.flush();if (fin.read() == 0) {// 服務端傳過來的是0 說明服務端上有相同數據// 打印秒傳了System.out.println("數據傳輸完畢!大小: " + file.length() + " 字節 耗時: 0秒 ! 秒傳機制");} else {// 打印的不是0,那么開始把數據傳輸給服務端long time = System.currentTimeMillis();System.out.println("\t\t數據傳輸中...\n");FileInputStream filein = new FileInputStream(file);byte[] b = new byte[1024 * 1024 * 2];while (filein.available() != 0) {int len = filein.read(b);fout.write(b, 0, len);fout.flush();}System.out.println("文件傳輸完畢!大小: " + file.length() + " 字節 耗時: " + (System.currentTimeMillis() - time) / 1000 + "秒");filein.close();}fout.close();fin.close();socket.close();} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {new ClientFiles().start();// 啟動客戶端線程} }

ServerFiles.java

/*** 更多資料歡迎瀏覽凱哥學堂官網:http://kaige123.com* @author 小沫*/ package com.files.mc;import java.io.File; 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.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.zip.InflaterOutputStream;public class ServerFiles implements Runnable {private Socket socket;public ServerFiles(Socket socket) {this.socket = socket;}public void run() {try {InputStream fin = socket.getInputStream();OutputStream fout = socket.getOutputStream();byte[] b = new byte[1024];int len = 0;len = fin.read(b);String md5 = new String(b, 0, len);//接收客戶端傳的MD5System.out.println(md5);File file = new File("filess");File[] files = file.listFiles();boolean state = false;//狀態默認為false 用來判斷MD5是否存在for (File file2 : files) {//如果找到了相同的MD5if (file2.getName().equalsIgnoreCase(md5)) {state = true;//狀態就改為true 表示有相同的MD5break;}}if (state == false) {//沒有找到相同的MD5 就給客戶端發送1過去 讓客戶端開始把數據發過來fout.write(1);fout.flush();FileOutputStream fileout = new FileOutputStream(new File("filess", md5));byte[] b1 = new byte[1024 * 1024 * 2];//把客戶端發來的數據存儲到文件中while ((len = fin.read(b)) != -1) {fileout.write(b1, 0, len);}fileout.close();} else {//如果找到了相同的MD5那么發送0給客戶端 fout.write(0);fout.flush();}fout.close();fin.close();socket.close();} catch (IOException e) {e.printStackTrace();}}public static void openServer() throws Exception {ServerSocket server = new ServerSocket(8080);ExecutorService executor = Executors.newFixedThreadPool(10);//線程池while (true) {ServerFiles socket = new ServerFiles(server.accept());executor.execute(socket);}}public static void main(String[] args) {try {openServer();//啟動服務端} catch (Exception e) {e.printStackTrace();}} }

轉載于:https://my.oschina.net/kaige123/blog/1488864

總結

以上是生活随笔為你收集整理的文件秒传的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。