[問題] 用 socket 傳輸檔案

看板java作者時間18年前 (2006/05/17 21:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
Hi, 我試著寫一個可以傳檔案的小程式, 原始碼在本文最下方, 程序很簡單, 基本上就是 server 等待 client 的連線, 連線之後就傳一個檔案給 client, 然後結束程式, 我用家中兩台電腦測試, 近端網路照理說速度可以到 100Mbps, 但結果只有 100 KB/s 左右, 後來我試著增加 buffer size, 最多也只能到 170 KB/s, 請問為什麼速度會這麼慢啊? 非常感謝!! ----------------------------以下程式原始碼-------------------------- //--------------------------- // Server.java //--------------------------- import java.io.*; import java.net.*; public class Server { public static void main(String[] args) throws IOException { // buffer size = 1MB byte data[] = new byte[1024*1024]; // 傳輸 "test.zip" 這個檔案 FileInputStream fileIn = new FileInputStream("test.zip"); // 使用 port 2345 ServerSocket ss = new ServerSocket(2345); // 等待連線 Socket s = ss.accept(); OutputStream out = s.getOutputStream(); // 填滿整個 buffer (1MB) 之後, 才送出去 int size; while ((size = fileIn.read(data)) != -1) { out.write(data, 0, size); out.flush(); } s.close(); } } //------------------------------ // Client.java //------------------------------ package test; import java.io.*; import java.net.*; public class Client { public static void main(String[] args) throws UnknownHostException, IOException { // buffer size = 1MB byte data[] = new byte[1024*1024]; // 連結某個 IP 的 port 2345 Socket s = new Socket("192.168.1.1", 2345); InputStream in = s.getInputStream(); // 將傳過來的檔案存成 "test.zip" FileOutputStream fileOut = new FileOutputStream("test.zip"); long start = System.currentTimeMillis(); // 填滿 buffer (1MB) 後, 才把資料寫入到檔案 int size; while ((size = in.read(data)) != -1) { fileOut.write(data, 0, size); fileOut.flush(); } s.close(); fileOut.close(); // 取得檔案大小 File file = new File("test.zip"); long fileSize = file.length(); long end = System.currentTimeMillis(); // 計算傳輸時間 (second) 及速度 (KB/s), 然後印出來 double duration = ((double) end - (double) start) / 1000.0; double speed = ((double) fileSize / 1024) / duration; System.out.println("Duration: " + duration + " seconds"); System.out.println("Speed: " + speed + " KB/s"); } } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.132.133.199 ※ 編輯: eliang 來自: 220.132.133.199 (05/17 21:36)
文章代碼(AID): #14Qo0DFY (java)