2013-05-03 94 views
0

我想編寫簡單的測量TCP連接速度的unix應用程序。 所以,我有:測量TCP連接速度

  • 服務器偵聽指定的端口上,接受連接和措施加快
  • 客戶端發送

我認爲在服務器的測量是財產以後這樣的消息(連續地):

clock_gettime(CLOCK_REALTIME, &start); 
size = recv(csocket_fd, buf, BUFFER_SIZE, 0); 
clock_gettime(CLOCK_REALTIME, &end); 

但它似乎是錯誤的方式。

有什麼建議?

+1

這看起來不一致,因爲如果數據已經被接收並保存在等待傳送給您的緩衝區中,它可能會很快返回,或者如果您必須等待遠程系統選擇。要首先解決您的問題,您必須決定「速度」的含義。例如,您可以對傳輸大文件的整個過程進行計時。但是要意識到TCP是爲可靠性而設計的,而不是速度 - 尤其是低延遲意義上的速度。 – 2013-05-03 15:30:06

回答

1

在服務器上,當您從客戶端收到第一個數據時,將當前時間記錄到變量中。

同樣在服務器上,每當您從客戶端接收數據時,都會將收到的字節數添加到計數器變量中。通過計算(total_bytes_received)/(current_time - first_data_received_time);然後在任何時候,您都可以計算連接的累積平均字節速度。 (如果current_time和first_data_received_time相等,請注意零的潛在除數!)

如果您想要做更詳細的描述,比如最近10秒內的運行平均值,那就多一點參與,但計算累積平均很容易。

0

我已經完成了網絡中的一些任務,有一件事我注意到它不會像您嘗試的那樣工作。我們必須完成服務器的發送 - 接收再次接收,還有其他因素阻止我們這樣做......從MTU到緩衝區大小等我已使用netperf來測試帶寬之前[這是你的速度正在談論?]。該代碼是開源的。

+0

我真的很抱歉...我似乎無法對問題發表評論..不得不把它作爲答案 – DarthCoder 2013-05-03 16:33:32