| Delphi中用Socket API實現(xiàn)PING時間:2011-6-2來源:yang 作者: peng點擊: 181次 
PING無非是向遠(yuǎn)程主機(jī)發(fā)送一個ICMP包,如果給定時間內(nèi)沒有接收到回應(yīng)就認(rèn)為是超時,如果收到回應(yīng)則分析接收到的ICMP包,得到TTL、類型以及用時。 unit YRecords; interface uses Windows; const ICMP_ECHO = 8; ICMP_ECHOREPLY = 0; ICMP_MIN = 8; PACKET_SIZE = 32; MAX_PACKET_SIZE = 512; MAX_IP_HDR_SIZE = 60; type s32 = Integer; u32 = DWORD; u8 = Byte; u16 = word; PU16 = ^U16; // //IP Packet Header // PIPHeader = ^YIPHeader; YIPHeader = record u8verlen : u8;//4bits ver, 4bits len, len*4=true length u8tos : u8;//type of service, 3bits 優(yōu)先權(quán)(現(xiàn)在已經(jīng)被忽略), 4bits TOS, 最多只能有1bit為1 u16totallen : u16;//整個IP數(shù)據(jù)報的長度,以字節(jié)為單位。 u16id : u16;//標(biāo)識主機(jī)發(fā)送的每一份數(shù)據(jù)報 u16offset : u16;//3bits 標(biāo)志,13bits片偏移 u8ttl : u8;//生存時間字段設(shè)置了數(shù)據(jù)報可以經(jīng)過的最多路由器數(shù)。 u8protol : u8;//協(xié)議類型,6表示傳輸層是TCP協(xié)議。 u16checksum : u16;//首部檢驗和 u32srcaddr : u32;//源IP地址,不是‘xxx.xxx.xxx.xxx’的形勢哦 u32destaddr : u32;//目的IP地址,同上 end; // //ICMP Packet Header // PICMPHeader = ^YICMPHeader; YICMPHeader = record u8type : u8; u8code : u8; u16chksum : u16; u16id : u16; u16seq : u16; end; 源碼下載 . | 
|  |