乙太網
(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...