2012-08-15 76 views
0

我研究了很多,我找到了一種方法來計算它,但我不確定
請幫我解決這個問題? :(
這是我的代碼計算傳輸文件在套接字c中的速度#

while (sum < length) 
{ 
    stopWatch.Restart(); 
    if (length - sum > packetSize) 
    { 
     count = fileStream.Read(buffer, 0, packetSize); 
     Send(socket_File, buffer); 
    } 
    else 
    { 
     buffer = new byte[length - sum]; 
     count = fileStream.Read(buffer, 0, length - sum); 
     Send(socket_File, buffer); 
    } 
    stopWatch.Stop(); 
    sum = sum + count; 
    SendFile.Downloaded = sum; 
    SendFile.Transfer_rate = ((sum * 8)/stopWatch.ElapsedMilliseconds).ToString();//kbps 
} 
+1

你認爲什麼是錯的? – 2012-08-15 21:09:16

+0

是否正確? – motaz99 2012-08-15 21:31:43

+2

@ motaz99在你所說的所有問題中,「幫我修復它」。實際上告訴我們什麼不工作和你期望的會更好。 – usr 2012-08-15 21:34:14

回答

2

一些隨機點:

  • 你可能想在循環外部採樣時鐘,而不是在每次迭代,
  • 一些文件閱讀時間也包含在你的計算中,
  • 你正在測量把字節放入OS套接字緩衝區的時間,而不是實際的傳輸。
0

我不相信

爲什麼不呢?在確定問題之前,沒有人能解決問題。

但是你的複製代碼是全錯的。您假設讀取填充緩衝區。你不能假設與TCP。

if (length - sum > packetSize) 
{ 
    count = fileStream.Read(buffer, 0, packetSize); 
} 
else 
{ 
    count = fileStream.Read(buffer, 0, length - sum); 
} 
Send(socket_File, buffer, count); 

當然,秒錶的啓動和停止以及打印輸出應該在循環之外,否則您只是對單個讀/寫對進行計時。

+0

顯示速度應該在循環 – motaz99 2012-08-16 14:24:51

+0

@ motaz99什麼'顯示速度'?你的代碼中沒有。只是有些線路計算錯誤。 – EJP 2012-08-21 05:31:29