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)