Windows atbalsta interneta vadības ziņojumu protokolu (ICMP), lai noteiktu, vai konkrēts resursdators ir pieejams. ICMP ir tīkla slāņa protokols, kas nodrošina plūsmas kontroli, kļūdu ziņojumus, maršrutēšanu un citus datus starp interneta mitinātājiem. ICMP galvenokārt izmanto lietojumprogrammu izstrādātāji tīkla ping izveidošanai.
Kas ir Ping?
Pingings ir atbalss ziņojuma nosūtīšanas process uz IP adresi un atbildes lasīšana, lai pārbaudītu savienojumu starp TCP / IP resursdatori. Ja jūs rakstāt jaunu lietojumprogrammu, jums labāk būs izmantot Winsock 2 neapstrādātu ligzdu atbalstu, kas ieviests Indija, piemēram.
Tomēr, lūdzu, ņemiet vērā, ka Windows NT un Windows 2000 ieviešanai neapstrādātās ligzdas tiek pakļautas drošības pārbaudēm un ir pieejamas tikai administratora grupas dalībniekiem. Icmp.dll nodrošina funkcionalitāti, kas ļauj izstrādātājiem rakstīt interneta ping lietojumprogrammas Windows sistēmās bez Winsock 2 atbalsta.
Ņemiet vērā, ka pirms ICMP.DLL atklāto funkciju izmantošanas ir jāizsauc Winsock 1.1 WSAStartup funkcija. Ja jūs to nedarīsit, pirmais zvans uz IcmpSendEcho neizdosies ar kļūdu 10091 (WSASYSNOTREADY).
Zemāk atrodams Ping vienības avota kods. Šeit ir divi lietošanas piemēri.
1. piemērs: koda fragments
izmanto Ping; ...
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
sāktJa Ping. Ping (ADP_IP) tad ShowMessage ('Par Delphi programmēšanu pieejama!');
beigas;
2. piemērs: konsoles režīma Delphi programma
Nākamais mūsu piemērs ir konsoles režīms Delphi programma kas izmanto Ping bloku:. Šeit ir Ping vienības avots:
vienība Ping;
saskarnes
Windows, SysUtils, klases;
tips
TSunB = iesaiņots ieraksts
s_b1, s_b2, s_b3, s_b4: baits;
beigas;
TSunW = iesaiņots ieraksts
s_w1, s_w2: vārds;
beigas;
PIPAddr = ^ TIPAddr;
TIPAddr = ieraksts
lietu vesels skaitlis no
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: longword);
beigas; IPAddr = TIPAddr;
funkcija IcmpCreateFile: Thandle; stdcall; ārējs 'icmp.dll';
funkcija IcmpCloseHandle (icmpHandle: THandle): Būla;
stdcall; ārējs 'icmp.dll'
funkcija IcmpSendEcho
(IcmpHandle: Thandle; Galamērķa adrese: IPAddr;
RequestData: rādītājs; RequestSize: Smallint;
RequestOptions: rādītājs;
ReplyBuffer: rādītājs;
ReplySize: DWORD;
Taimauts: DWORD): DWORD; stdcall; ārējs 'icmp.dll';
funkcija Ping (InetAddress: virkne): Būla;
implementācijas
WinSock;
funkcija Ielādēt (var Ieeja: virkne;
const ADelim: virkne = ' ';
const ADelete: Būla = patiesa)
: virkne;
var
iPos: vesels skaitlis;
sākt
ja ADelim = # 0 tad sāc
// AnsiPos nedarbojas ar numuru 0
iPos: = Pos (ADelim, AInput);
beigas vēl sākas
iPos: = Pos (ADelim, AInput);
beigas;
ja iPos = 0 tad sāc
Rezultāts: = A ieeja;
ja ADelete tad sāc
Ieeja: = '';
beigas;
beigas vēl sākas
rezultāts: = Kopēt (AInput, 1, iPos - 1);
ja ADelete tad sāc
Dzēst (AInput, 1, iPos + Length (ADelim) - 1);
beigas;
beigas;
beigas;
procedūra TranslateStringToTInAddr (AIP: virkne; var AInAddr);
var
phe: PHostEnt; pac: PChar; GInitData: TWSAData;
sākt
WSAStartup (USD 101, GInitData);
mēģiniet
phe: = GetHostByName (PChar (AIP));
ja Piešķirts (phe) tad sāk
pac: = phe ^ .h_addr_list ^;
ja Piešķirts (pac) tad
sākt
ar TIPAddr (AInAddr) .S_un_b jāsāk
s_b1: = baits (pac [0]); s_b2: = baits (pac [1]); s_b3: = baits (pac [2]); s_b4: = baits (pac [3]);
beigas;
beigas
cits
sākt
paaugstināt Izņēmums. Izveidot ('Kļūda, iegūstot IP no HostName');
beigas;
beigas
cits
sākt
paaugstināt Izņēmums. Izveidot ('Kļūda iegūstot HostName');
beigas;
izņemot
FillChar (AInAddr, SizeOf (AInAddr), # 0);
beigas; WSACleanup;
beigas;
funkcija Ping (InetAddress: virkne): Būla;
var
Rokturis: Rokturis;
InAddr: IPAddr;
DW: DWORD;
rep: masīvs[1..128] no baits;
sākt
rezultāts: = nepatiess; Rokturis: = IcmpCreateFile;
ja Rokturis = INVALID_HANDLE_VALUE tad
Izeja;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Rokturis, InAddr, nulle, 0, nulle, @rep, 128, 0); Rezultāts: = (DW 0); IcmpCloseHandle (Rokturis);
beigas;
beigas.