ablakok támogatja az Internet Control Message Protocol (ICMP) protokollt annak meghatározására, hogy rendelkezésre áll-e egy adott gazdagép. Az ICMP egy hálózati rétegű protokoll, amely folyamatvezérlést, hibaüzeneteket, útválasztást és egyéb adatokat továbbít az internetes gépek között. Az ICMP-t elsősorban az alkalmazásfejlesztők használják hálózati ping-okhoz.
Mi az a ping?
A ping az a folyamat, amikor visszhang üzenetet küld egy IP-címre, és elolvassa a választ, hogy ellenőrizze a közötti kapcsolatot TCP / IP gazdagépek. Ha új alkalmazást ír, akkor jobb, ha a Winsock 2 nyers socket-támogatást használja, amelyet 2006-ban implementáltak Indy, például.
Felhívjuk azonban figyelmét, hogy a Windows NT és a Windows 2000 implementációk esetén a Raw Socket-ek biztonsági ellenőrzés alá esnek, és csak a rendszergazdai csoport tagjai számára érhetők el. Az Icmp.dll olyan funkciókat kínál, amelyek lehetővé teszik a fejlesztők számára, hogy Internet ping alkalmazásokat írjanak a Windows rendszerekre Winsock 2 támogatás nélkül.
Vegye figyelembe, hogy a Winsock 1.1 WSAStartup funkciót meg kell hívni az ICMP.DLL által feltárt funkciók használata előtt. Ha nem ezt teszi meg, akkor az IcmpSendEcho első hívása 10091 hibával sikertelen lesz (WSASYSNOTREADY).
Az alábbiakban megtalálja a Ping egység forráskódját. Íme két példa a felhasználásra.
1. példa: Kódrészlet
felhasználások Ping; ...
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
beginIf Ping. Ping (ADP_IP) azután ShowMessage ('A Delphi programozásáról elérhető!');
vég;
2. példa: Konzol mód Delphi program
Következő példa a konzol mód Delphi program amely a Ping egységet használja: Itt található a Ping egység forrása:
Mértékegység Ping;
interfaceuses
Windows, SysUtils, Osztályok;
típus
TSunB = csomagolt rekord
s_b1, s_b2, s_b3, s_b4: byte;
vég;
TSunW = csomagolt rekord
s_w1, s_w2: szó;
vég;
PIPAddr = ^ TIPAddr;
TIPAddr = rekord
ügy egész szám nak,-nek
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: hosszúszó);
végIPAddr = TIPAddr;
funkció IcmpCreateFile: Thandle; stdcall; külső 'Icmp.dll';
funkció IcmpCloseHandle (icmpHandle: THandle): logikai;
stdcall; külső 'Icmp.dll'
funkció IcmpSendEcho
(IcmpHandle: THandle; DestinationAddress: IPAddr;
RequestData: Pointer; RequestSize: Smallint;
RequestOptions: mutató;
VálaszBuffer: Mutató;
Válasz méret: DWORD;
Időtúllépés: DWORD): DWORD; stdcall; külső 'Icmp.dll';
funkció Ping (InetAddress: húr): logikai;
implementationuses
WinSock;
funkció Fetch (var AInput: húr;
const ADelim: húr = ' ';
const ADelete: logikai = igaz)
: húr;
var
iPOS: egész szám;
kezdődik
ha ADelim = # 0 akkor kezdje el
// Az AnsiPos nem működik a # 0-zal
iPos: = Pos (ADelim, AInput);
a másik vége kezdődik
iPos: = Pos (ADelim, AInput);
vég;
ha iPos = 0 akkor kezdje el
Eredmény: = AInput;
ha ADelete akkor kezdje el
AInput: = '';
vég;
a másik vége kezdődik
eredmény: = Másolás (AInput, 1, iPos - 1);
ha ADelete akkor kezdje el
Törlés (AInput, 1, iPos + Length (ADelim) - 1);
vég;
vég;
vég;
eljárás TranslateStringToTInAddr (AIP: húr; var AInAddr);
var
phe: PHostEnt; pac: PChar; GInitData: TWSAData;
kezdődik
WSAStartup ($ 101, GInitData);
próbáld ki
phe: = GetHostByName (PChar (AIP));
ha Hozzárendelt (phe) thenbegin
pac: = phe ^ .h_addr_list ^;
ha Hozzárendelt (pac) azután
kezdődik
val vel TIPAddr (AInAddr) .S_un_b kezdődik
s_b1: = Byte (pac [0]); s_b2: = Byte (pac [1]); s_b3: = Byte (pac [2]); s_b4: = Byte (pac [3]);
vég;
vég
más
kezdődik
emel Kivétel. Létrehozás ('Hiba az IP megszerzésekor a HostNameből');
vég;
vég
más
kezdődik
emel Kivétel. Létrehozás ('Hiba a HostName megszerzésekor');
vég;
kivéve
FillChar (AInAddr, SizeOf (AInAddr), # 0);
vég; WSACleanup;
vég;
funkció Ping (InetAddress: húr): logikai;
var
Fogantyú: THandle;
InAddr: IPAddr;
DW: DWORD;
ismétlés: sor[1..128] nak,-nek byte;
kezdődik
eredmény: = hamis; Fogantyú: = IcmpCreateFile;
ha Fogantyú = INVALID_HANDLE_VALUE azután
Kijárat;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Fogantyú, InAddr, nulla, 0, nulla, @rep, 128, 0); eredmény: = (DW 0); IcmpCloseHandle (Fogantyú);
vég;
vég.