亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java Socket實現文件傳輸示例代碼

2019-11-11 03:53:16
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了java Socket實現文件傳輸示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近學Socket學上癮了,就寫了一個簡單的文件傳輸程序。

客戶端設計思路:客戶端與服務端建立連接,選擇客戶端本地文件,先將文件名及大小等屬性發送給服務端,再將文件通過流的方式傳輸給服務端。傳輸的進度打印到控制臺中,直到傳輸完成。

服務端設計思路:服務端接收客戶端的請求(阻塞式),每接收到一個客戶端請求連接后,就新開一個處理文件的線程,開始寫入流,將文件到服務器的指定目錄下,并與傳輸過來的文件同名。下面是客戶端和服務端的代碼實現:

客戶端代碼:

?
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.Socket;   /**  * 文件傳輸Client端<br> * 功能說明: * * @author 大智若愚的小懂 * @Date 2016年09月01日 * @version 1.0 */public class FileTransferClient extendsSocket {     PRivatestatic final String SERVER_ip = "127.0.0.1";// 服務端IP   privatestatic final int SERVER_PORT = 8899;// 服務端端口     privateSocket client;     privateFileInputStream fis;     privateDataOutputStream dos;     /**   * 構造函數<br/>   * 與服務器建立連接   * @throws Exception   */  publicFileTransferClient() throwsException {     super(SERVER_IP, SERVER_PORT);    this.client =this;     System.out.println("Cliect[port:"+ client.getLocalPort() + "] 成功連接服務端");  }    /**   * 向服務端傳輸文件   * @throws Exception   */  publicvoid sendFile() throws Exception {     try{       File file =new File("E://JDK1.6中文參考手冊(JDK_API_1_6_zh_CN).CHM");      if(file.exists()) {        fis =new FileInputStream(file);        dos =new DataOutputStream(client.getOutputStream());          // 文件名和長度        dos.writeUTF(file.getName());        dos.flush();        dos.writeLong(file.length());        dos.flush();          // 開始傳輸文件        System.out.println("======== 開始傳輸文件 ========");        byte[] bytes =new byte[1024];        intlength = 0;        longprogress = 0;        while((length = fis.read(bytes,0, bytes.length)) != -1) {          dos.write(bytes,0, length);           dos.flush();          progress += length;          System.out.print("| "+ (100*progress/file.length()) +"% |");         }        System.out.println();        System.out.println("======== 文件傳輸成功 ========");      }    }catch (Exception e) {      e.printStackTrace();    }finally {       if(fis !=null)         fis.close();      if(dos !=null)         dos.close();      client.close();    }  }    /**   * 入口   * @param args   */  publicstatic void main(String[] args) {     try{       FileTransferClient client =new FileTransferClient();// 啟動客戶端連接       client.sendFile();// 傳輸文件     }catch (Exception e) {      e.printStackTrace();    }  }  }

服務端代碼:

?
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138import java.io.DataInputStream; import java.io.File; import java.io.FileOutputStream; import java.math.RoundingMode; import java.net.ServerSocket; import java.net.Socket; import java.text.DecimalFormat;   /**  * 文件傳輸Server端<br> * 功能說明: * * @author 大智若愚的小懂 * @Date 2016年09月01日 * @version 1.0 */public class FileTransferServer extendsServerSocket {     privatestatic final int SERVER_PORT = 8899;// 服務端端口     privatestatic DecimalFormat df =null;     static{     // 設置數字格式,保留一位有效小數    df =new DecimalFormat("#0.0");    df.setRoundingMode(RoundingMode.HALF_UP);    df.setMinimumFractionDigits(1);    df.setMaximumFractionDigits(1);  }    publicFileTransferServer() throwsException {     super(SERVER_PORT);  }    /**   * 使用線程處理每個客戶端傳輸的文件   * @throws Exception   */  publicvoid load() throwsException {     while(true) {      // server嘗試接收其他Socket的連接請求,server的accept方法是阻塞式的      Socket socket =this.accept();       /**       * 我們的服務端處理客戶端的連接請求是同步進行的, 每次接收到來自客戶端的連接請求后,       * 都要先跟當前的客戶端通信完之后才能再處理下一個連接請求。 這在并發比較多的情況下會嚴重影響程序的性能,       * 為此,我們可以把它改為如下這種異步處理與客戶端通信的方式       */      // 每接收到一個Socket就建立一個新的線程來處理它      newThread(new Task(socket)).start();     }  }    /**   * 處理客戶端傳輸過來的文件線程類   */  classTask implementsRunnable {       privateSocket socket;       privateDataInputStream dis;       privateFileOutputStream fos;       publicTask(Socket socket) {       this.socket = socket;    }      @Override    publicvoid run() {       try{         dis =new DataInputStream(socket.getInputStream());          // 文件名和長度        String fileName = dis.readUTF();        longfileLength = dis.readLong();         File directory =new File("D://FTCache");        if(!directory.exists()) {          directory.mkdir();        }        File file =new File(directory.getAbsolutePath() + File.separatorChar + fileName);        fos =new FileOutputStream(file);          // 開始接收文件        byte[] bytes =new byte[1024];        intlength = 0;        while((length = dis.read(bytes,0, bytes.length)) != -1) {          fos.write(bytes,0, length);           fos.flush();        }        System.out.println("======== 文件接收成功 [File Name:"+ fileName + "] [Size:"+ getFormatFileSize(fileLength) + "] ========");      }catch (Exception e) {        e.printStackTrace();      }finally {         try{           if(fos !=null)             fos.close();          if(dis !=null)             dis.close();          socket.close();        }catch (Exception e) {}      }    }  }    /**   * 格式化文件大小   * @param length   * @return   */  privateString getFormatFileSize(longlength) {     doublesize = ((double) length) / (1<< 30);    if(size >=1) {       returndf.format(size) + "GB";    }    size = ((double) length) / (1<< 20);    if(size >=1) {       returndf.format(size) + "MB";    }    size = ((double) length) / (1<< 10);    if(size >=1) {       returndf.format(size) + "KB";    }    returnlength + "B";  }    /**   * 入口   * @param args   */  publicstatic void main(String[] args) {     try{       FileTransferServer server =new FileTransferServer();// 啟動服務端       server.load();    }catch (Exception e) {      e.printStackTrace();    }  }}

測試的結果(客戶端):

測試的結果(服務端):

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日产日韩在线亚洲欧美| 欧美黄色片免费观看| 91久久国产婷婷一区二区| 一区二区在线免费视频| 色午夜这里只有精品| 中文字幕亚洲精品| 国产视频精品久久久| 欧美成人合集magnet| 在线播放国产一区二区三区| 日韩在线观看免费网站| 国产精品专区第二| 日韩精品在线免费观看| 欧美肥婆姓交大片| 清纯唯美亚洲激情| 亚洲天堂av综合网| 清纯唯美亚洲综合| 久久噜噜噜精品国产亚洲综合| 亚洲色图av在线| 欧美专区在线视频| 国产福利精品在线| 日本亚洲精品在线观看| 亚洲欧美激情精品一区二区| 中文字幕亚洲无线码在线一区| 国产成人精品a视频一区www| 久久久免费观看视频| 538国产精品视频一区二区| 久久精品99久久久久久久久| 日韩高清电影好看的电视剧电影| 91精品国产91久久| 国产999精品视频| 少妇av一区二区三区| 91亚洲国产成人精品性色| 中文一区二区视频| 欧美激情中文字幕在线| 国产精品久久久av| 国产成人精品免费视频| 色偷偷av亚洲男人的天堂| 欧美性感美女h网站在线观看免费| 欧美—级a级欧美特级ar全黄| 米奇精品一区二区三区在线观看| 欧美黑人xxxx| 伊人青青综合网站| 欧美高清自拍一区| 亚洲精品影视在线观看| 亚洲香蕉av在线一区二区三区| 精品人伦一区二区三区蜜桃免费| 一本色道久久88精品综合| 欧美激情伊人电影| 97超碰国产精品女人人人爽| 精品国产自在精品国产浪潮| 91久久精品久久国产性色也91| 久久久综合免费视频| 91理论片午午论夜理片久久| 日韩精品极品视频| 成人女保姆的销魂服务| 亚洲欧美日本另类| 亚洲欧美另类人妖| 国产一区二区三区丝袜| 在线激情影院一区| 久久97精品久久久久久久不卡| 亚洲国产精品成人va在线观看| 欧美在线播放视频| 欧美日韩一二三四五区| 久久久电影免费观看完整版| 乱亲女秽乱长久久久| 国产成人一区二区三区小说| 777午夜精品福利在线观看| 国产欧美日韩中文字幕| 亚洲理论片在线观看| 亚州欧美日韩中文视频| 亚洲码在线观看| 久久久久久国产三级电影| 在线成人一区二区| 中文字幕亚洲专区| 原创国产精品91| 亚洲精品美女在线| 欧美日韩国产成人在线| www.日韩不卡电影av| 日韩网站免费观看高清| 亚洲第一中文字幕在线观看| 日韩欧美国产一区二区| 亚洲男人第一av网站| 亚洲成在人线av| 欧美高清视频在线播放| 欧美电影电视剧在线观看| 成人免费激情视频| 欧美在线视频一区| 2021久久精品国产99国产精品| 最新日韩中文字幕| 在线看福利67194| 亚洲国产成人91精品| 久久精品亚洲热| 视频在线一区二区| 久久人人爽人人爽人人片av高请| 欧美高清理论片| 国产精品久久一区| 亚洲精品黄网在线观看| 久久影视电视剧免费网站| 久久香蕉国产线看观看网| 久久婷婷国产麻豆91天堂| 日韩电视剧在线观看免费网站| 自拍偷拍亚洲精品| 久久久精品免费| 亚洲午夜久久久影院| 2019中文字幕在线| 成人日韩在线电影| 欧美性xxxxhd| 日韩欧美a级成人黄色| 亚洲欧美日韩中文在线制服| 麻豆成人在线看| 欧美日韩一区二区三区在线免费观看| 亚洲欧美综合另类中字| 91黑丝在线观看| 亚洲国产成人久久综合一区| 日韩中文字幕国产| 久久久久久网址| 97超碰国产精品女人人人爽| 日本91av在线播放| 日韩av手机在线观看| 欧美在线国产精品| 中文字幕精品国产| 欧美性猛交xxxx黑人| 精品国模在线视频| 久久久久久亚洲精品中文字幕| 国产一区视频在线| 午夜精品久久久久久久白皮肤| 国产精品人成电影在线观看| 亚洲视频欧洲视频| 中文字幕久久久| 亚洲欧美www| 欧美日产国产成人免费图片| 国产欧美日韩丝袜精品一区| 国产亚洲免费的视频看| 欧美日韩精品中文字幕| 国产精品国产三级国产aⅴ9色| 日韩成人av在线| 在线播放日韩专区| 亚洲欧美中文另类| 亚洲精品电影久久久| 久久久久久久香蕉网| 国产成人涩涩涩视频在线观看| 欧美激情va永久在线播放| 色综合久久久888| 91成人免费观看网站| 色婷婷综合久久久久中文字幕1| 日韩av黄色在线观看| 77777亚洲午夜久久多人| 色琪琪综合男人的天堂aⅴ视频| 欧美日韩免费网站| 一区二区欧美久久| 国产精品一区二区久久久久| 亚洲最大的免费| 亚洲综合成人婷婷小说| 欧美资源在线观看| 亚洲二区在线播放视频| 欧美日韩中文字幕在线| 日韩麻豆第一页| 国产精品一区二区久久国产| 欧美午夜精品久久久久久人妖| 国产精品亚洲片夜色在线| 日韩小视频网址| 日日骚av一区| 日韩欧美在线视频日韩欧美在线视频| 久久精品欧美视频|