亚洲香蕉成人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
亚洲男人的天堂网站| 国产精品视频网址| 亚洲视频在线播放| 国产大片精品免费永久看nba| 国产视频久久久久久久| 在线播放日韩专区| 欧美日韩精品二区| 欧美精品福利在线| 欧美亚洲国产日本| 欧美xxxx18国产| 国产一区二区三区在线| 夜夜嗨av一区二区三区四区| 国产亚洲一级高清| 5566日本婷婷色中文字幕97| 2018国产精品视频| 成人淫片在线看| 精品国产拍在线观看| 亚洲视频国产视频| 国产一区二区三区在线免费观看| 欧美福利视频在线| 日韩电影在线观看免费| 亚洲人精品午夜在线观看| 欧美精品制服第一页| 97在线视频精品| 亚洲欧美成人精品| 国内伊人久久久久久网站视频| 亚洲第一网站男人都懂| 91国自产精品中文字幕亚洲| 欧美大肥婆大肥bbbbb| 亚洲香蕉伊综合在人在线视看| 26uuu另类亚洲欧美日本老年| 欧美激情亚洲激情| 日韩69视频在线观看| 欧美日产国产成人免费图片| 久久国产精品久久久| 日韩中文第一页| 国产精品久久综合av爱欲tv| 日韩在线视频线视频免费网站| 成人a免费视频| 亚洲精品乱码久久久久久金桔影视| 午夜精品久久久久久久白皮肤| 国产精品免费久久久| 97超碰国产精品女人人人爽| 91成人精品网站| 亚洲成人av在线| 久久精品久久精品亚洲人| 日韩亚洲综合在线| 欧美成aaa人片免费看| 欧美成人免费视频| 国产欧美精品在线播放| 日本一区二区三区四区视频| 精品国产乱码久久久久久婷婷| 国产婷婷成人久久av免费高清| 亚洲色图色老头| 欧美成年人视频| 性夜试看影院91社区| 日韩视频永久免费观看| 日韩电影网在线| 国产激情久久久| 国产美女高潮久久白浆| 精品亚洲一区二区| 亚洲人成在线一二| 欧亚精品在线观看| 一本色道久久综合狠狠躁篇的优点| 亚洲国产又黄又爽女人高潮的| 精品国产区一区二区三区在线观看| 欧洲永久精品大片ww免费漫画| www.亚洲一二| www.欧美精品一二三区| 成人国产精品一区| 精品福利在线看| 深夜福利一区二区| 中文字幕日韩欧美| 精品成人69xx.xyz| 国产精品久久久久久久久久小说| 中文字幕日韩在线视频| 日本不卡视频在线播放| 日韩激情av在线播放| 国产亚洲免费的视频看| 国产精品高潮在线| 亚洲午夜性刺激影院| 亚洲视频第一页| 欧美体内谢she精2性欧美| 精品久久久久久中文字幕一区奶水| 乱亲女秽乱长久久久| 国产91精品久| 国产精品久久久久秋霞鲁丝| 日本久久久久久久| 欧美日韩激情网| 精品视频久久久久久| 欧美麻豆久久久久久中文| 欧美成人激情视频免费观看| 91av在线免费观看视频| 日韩欧美视频一区二区三区| 亚洲日韩欧美视频一区| 亚洲成人999| 性色av香蕉一区二区| 亚洲va久久久噜噜噜| 亚洲三级黄色在线观看| 亚洲色图av在线| 国产精品劲爆视频| 精品国内亚洲在观看18黄| 国产小视频国产精品| 久久亚洲精品中文字幕冲田杏梨| 欧美国产在线视频| 日本一区二三区好的精华液| 日韩有码在线观看| 久久久久国产精品www| 国产69精品99久久久久久宅男| 成人亚洲综合色就1024| 欧美在线亚洲一区| 中文字幕免费精品一区高清| 欧美丰满少妇xxxxx| 亚洲区bt下载| 一区二区三区日韩在线| 北条麻妃一区二区三区中文字幕| 伊人精品在线观看| 国产最新精品视频| 插插插亚洲综合网| 国产精品国产福利国产秒拍| 一区二区在线视频| 日韩欧美成人免费视频| 精品国产美女在线| 91国产精品视频在线| 深夜福利国产精品| 日韩av男人的天堂| 国产精品视频公开费视频| 欧美制服第一页| 68精品国产免费久久久久久婷婷| 国产精品自拍网| 精品久久久久久久久国产字幕| 亚洲午夜未满十八勿入免费观看全集| 亚洲精品乱码久久久久久按摩观| 亚洲精品欧美日韩| 久久久国产视频| 久久久久国产精品www| 久久精品国产一区二区三区| 国产精品大陆在线观看| 欧美成人午夜剧场免费观看| 久久99久久99精品免观看粉嫩| 在线视频一区二区| 国产精品高潮呻吟久久av黑人| 97久久久免费福利网址| 亚洲天堂2020| 孩xxxx性bbbb欧美| 国产亚洲精品一区二555| 日韩美女在线看| 精品国产一区二区三区久久久狼| 亚洲免费成人av电影| 精品少妇一区二区30p| 久久久视频精品| 欧美日韩国产二区| 久久久精品一区二区三区| 亚洲色图激情小说| 精品久久久久久久大神国产| 欧美日韩国产黄| 欧美夫妻性生活视频| 欧美午夜精品久久久久久久| 国产精品久久久久久久久影视| 91精品国产自产在线| 亚洲第一男人av| 国产成人97精品免费看片| 久久九九有精品国产23| 亚洲人成网在线播放|