UDP網路延遲測試程式

2021-06-21 04:25:25 字數 2829 閱讀 5140

乙太網

(ethernet)

資料幀的長度必須在

46-1500

位元組之間

,這是由乙太網的物理特性決定的

.  這個

1500

位元組被稱為鏈路層的

mtu(

最大傳輸單元

). 

但這並不是指鏈路層的長度被限制在

1500位元組,

其實這這個

mtu指的是鏈路層的資料區

.  並不包括鏈路層的首部和尾部的

18個位元組.

因為ip

資料報的首部為

20位元組,所以

ip資料報的資料區長度最大為

1480

位元組. 

又因為udp資料報的首部8位元組

,所以udp資料報的資料區最大長度為

1472

位元組.  鑑於

internet

上的標準

mtu值為

576位元組

,所以我建議在進行

internet

的udp

程式設計時. 

網路延遲測試程式

伺服器端:

#include

#include

#pragma

comment(lib,"ws2_32.lib")

int _tmain(int argc, _tchar* argv)

printf("客戶端輸入的是:%s\n",frombuff);

//sleep(5000);

if(sendto(serversocket,frombuff,sizeof(frombuff),0,(struct sockaddr*)&addr,fromlen) == socket_error)

}closesocket(serversocket);

wsacleanup();

return 0;

}客戶端:

#include

#include

#include

#pragma

comment(lib,"ws2_32.lib")

int main(void)

queryperformancecounter(&t1);//

測前跳動次數

if(recvfrom(clientsocket,buff,sizeof(buff),0,(struct sockaddr*)&addr,&len) == socket_error)

queryperformancecounter(&t2);//

測後跳動次數

printf("從服務端返回:%s\n",buff);

printf("--->>時間延遲:%f秒\n",((double)t2.quadpart-(double)t1.quadpart)/((double)feq.quadpart));

}closesocket(mysocket);

wsacleanup();

return 0;

}主要就是用了queryperformancefrequency(&feq)高精度效能計時器的頻率函式和queryperformancecounter(&t1)函式,

queryperformancefrequency() -

基本介紹

型別:win32api

原型:bool queryperformancefrequency(large_integer *lpfrequency);

作用:返回硬體支援的高精度計數器的頻率。

返回值:非零,硬體支援高精度計數器;零,硬體不支援,讀取失敗。

queryperformancefrequency() - 技術特點供win9x使用的高精度定時器:queryperformancefrequency()和queryperformancecounter(),要求計算機從硬體上支援高精度定時器。

函式的原形是:

bool queryperformancefrequency(large_integer *lpfrequency);

bool queryperformancecounter (large_integer *lpcount);

資料型別largeinteger既可以是乙個作為8位元組長的整數,也可以是作為兩個4位元組長的整數的聯合結構,其具體用法根據編譯器是否支援64位而定。該型別的定義如下:

typeef union _ large_integer

;longlong quadpart;

} large_integer;

在定時前應該先呼叫queryperformancefrequency()函式獲得機器內部計時器的時鐘頻率。接著在需要嚴格計時的事件發生前和發生之後分別呼叫queryperformancecounter(),利用兩次獲得的計數之差和時鐘頻率,就可以計算出事件經歷的精確時間。測試函式sleep(100)的精確持續時間方法:

large_integer litmp;

longlong qt1,qt2;

double dft,dff,dfm;

queryperformancefrequency(&litmp);//獲得時鐘頻率

dff=(double)litmp.quadpart;

queryperformancecounter(&litmp);//獲得初始值

qt1=litmp.quadpart;sleep(100);

queryperformancecounter(&litmp);//獲得終止值

qt2=litmp.quadpart;

dfm=(double)(qt2-qt1);

dft=dfm/dff;//獲得對應的時間值

需要注意的是dft計算的結果單位是秒。

網路 簡單的UDP網路程式

udp網路程式設計的小前提 其大致流程如下 udp伺服器和客戶端實現需要的標頭檔案 include include include 主要分為以下4個板塊 服務端 server include include include include include include include intmai...

弱網測試 fiddler模擬網路延遲

1 弱網功能測試 弱網使用者體驗關注 1 頁面響應時間是否可接受,關注包括熱啟動 冷啟動時間,頁面切換,前後臺切換,首字時間,首屏時間等。2 頁面呈現是否完整一致。3 超時文案是否符合定義,異常資訊是否顯示正常。4 是否會有超時重連。2 網路切換測試 wifi 4g 3g 2g 無網多狀態切換 3 ...

udp網路程式 傳送 接收資料

建立乙個基於udp的網路程式流程很簡單,具體步驟如下 建立客戶端套接字 傳送 接收資料 關閉套接字 如下 coding utf 8 from socket import 1.建立udp套接字 udp socket socket af inet,sock dgram 2.準備接收方的位址 192.16...