2010-12-30 15 views
9

私は、Javaを使用してデスクトップアプリケーションで作業しています。私のアプリケーションでは、ファイルのアップロードとダウンロード速度を示す速度テストを実行する必要があります。FTPを使用したファイルアップロードとダウンロード速度のテスト

アップロードテストのために、私はFTPサーバーに小さなテストファイルをアップロードしています。時間に基づいて、ファイルのアップロード速度を計算しています。同様に私はテストファイルフォームサーバーをダウンロードし、ダウンロード速度を計算しています。

結果私は実際のFTPファイルのアップロードとダウンロード速度に合っていません.FTPサーバーへの接続が確立されているようですので、計算速度が遅くなります。ここ

は、私が使用しているファイルアップロードコードです:

 public int getTransferRate(File filename) 
    {   
     int trRate = 0; 

     try { 

     OutputStream fout = null; 
     InputStream bin = null; 

     connect(ftpUser,ftpPass,ftpServer); 


     ftp.setFileType(FTPSClient.BINARY_FILE_TYPE); 
     ftp.enterLocalPassiveMode(); 
     fout = ftp.storeFileStream("testuploadfile"); 

     bin = new FileInputStream(filename); 
     byte[] b = new byte[8192]; 
     int bytesRead = 0; 

     long startTime = System.currentTimeMillis(); 
     long endTime = 0; 
     while ((bytesRead = bin.read(b)) != -1) { 
      fout.write(b, 0, bytesRead); 
      bytesUploadedSet += bytesRead; 
     } 
     endTime = System.currentTimeMillis(); 
     trRate = (int) ((float) bytesUploadedSet/(endTime - startTime)); 

    } catch (IOException ex) { 
     Logger.getLogger(FTPFileStorageService.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return trRate; 
} 

あなたは、任意のリンクまたは最寄りのアップロードとダウンロード速度を得るためにいくつかの方法を提案でした。

貴重なご意見ありがとうございます。

+0

あなたが転送を開始し、速度を算出する方法を実証する(最小限)のサンプルコードを投稿することができますか? – SimonJ

答えて

1

まず、filezillaはネイティブコードを使用していますが、これは使用しているものより高速です。

テストのために、接続を確立し、約20程度のファイルをアップロードしてみてください。結果をよく知っているはずです。また、出力をコンマ区切りのテストファイルなどに記録してください。後でExcelにインポートして分析することができます。ハードコアパフォーマンステストをしたい場合は、JMeterのようなものを使うことができます。

大きなサンプルサイズ(多くのサンプル結果)を持つパフォーマンステストでは、最も正確な結果が得られます。

http://jmeter.apache.org/

1

接続が確立された後、タイマーを起動できませんか?

クイック部分解決の場合は、テストファイルのサイズを大きくします。サイズが大きいほど、接続のオーバーヘッドは小さくなります。

あなたがより正確である必要があれば、私はより多くのHAVA体験を誰かに延期するだろうが...

+0

私は2MBのファイルをアップロードテスト用に試していて、接続確立後にタイマーを起動しようとしていますが、ファイル転送用にFilezillaを使用しているときには100kbps程度ですが、テストでは最大65kbpsになります。正確な結果に近づいていない理由は何でしょうか? – Toman

0

あなたはHTTPなどの単純なプロトコルを使用することはできますか?

FTP転送を設定すると、制御とデータの接続を個別に設定する必要があり、両方のエンドポイントがパッシブまたはアクティブモードを使用してファイアウォールとNATを回避するかどうかを合意する必要があります。このプロセスには、オプションの1つ(たとえばアクティブ)を試し、成功またはタイムアウトを待っているだけで、測定値が歪んでいる可能性があります。

+0

お返事ありがとうございます。私のアプリケーションはファイル転送にFTPを使用するので、FTP速度を計算する必要があります。また、HTTPを使用する場合は、ファイアウォールが有効な場合はadminからhttpを許可する権限が必要です。 – Toman

関連する問題