ramen ondersteunt een Internet Control Message Protocol (ICMP) om te bepalen of een bepaalde host al dan niet beschikbaar is. ICMP is een netwerklaagprotocol dat stroomcontrole, foutmeldingen, routing en andere gegevens tussen internethosts levert. ICMP wordt voornamelijk gebruikt door applicatieontwikkelaars voor een netwerkping.
Wat is een ping?
Een ping is het proces van het verzenden van een echobericht naar een IP-adres en het lezen van het antwoord om een verbinding tussen te verifiëren TCP / IP-hosts. Als u een nieuwe applicatie schrijft, kunt u beter de Winsock 2 raw sockets-ondersteuning gebruiken, geïmplementeerd in Indy, bijvoorbeeld.
Houd er echter rekening mee dat Raw Sockets voor Windows NT- en Windows 2000-implementaties onderhevig zijn aan beveiligingscontroles en alleen toegankelijk zijn voor leden van de beheerdersgroep. Icmp.dll biedt functionaliteit waarmee ontwikkelaars internet-ping-toepassingen kunnen schrijven op Windows-systemen zonder Winsock 2-ondersteuning.
Merk op dat de Winsock 1.1 WSAStartup-functie moet worden aangeroepen voordat de functies worden gebruikt die worden weergegeven door ICMP.DLL. Als u dit niet doet, mislukt de eerste aanroep van IcmpSendEcho met fout 10091 (WSASYSNOTREADY).
Hieronder vindt u de broncode van de Ping-eenheid. Hier zijn twee voorbeelden van gebruik.
Voorbeeld 1: Codefragment
toepassingen Ping;...
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
beginnen als Ping. Ping (ADP_IP) vervolgens ShowMessage ('Over Delphi Programming bereikbaar!');
einde;
Voorbeeld 2: Console Mode Delphi Program
Ons volgende voorbeeld is een consolemodus Delphi-programma die de Ping-eenheid gebruikt:. Hier is de bron van de Ping-eenheid:
eenheid Ping;
interfaceuses
Windows, SysUtils, Klassen;
type
TSunB = verpakt record
s_b1, s_b2, s_b3, s_b4: byte;
einde;
TSunW = verpakt record
s_w1, s_w2: woord;
einde;
PIPAddr = ^ TIPAddr;
TIPAddr = Vermelding
geval geheel getal van
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: langwoord);
einde; IPAddr = TIPAddr;
functie IcmpCreateFile: THandle; stdcall; extern 'icmp.dll';
functie IcmpCloseHandle (icmpHandle: THandle): boolean;
stdcall; extern 'icmp.dll'
functie IcmpSendEcho
(IcmpHandle: THandle; DestinationAddress: IPAddr;
RequestData: Aanwijzer; RequestSize: Smallint;
RequestOptions: pointer;
ReplyBuffer: Pointer;
ReplySize: DWORD;
Time-out: DWORD): DWORD; stdcall; extern 'icmp.dll';
functie Ping (InetAddress: draad): boolean;
implementatie
WinSock;
functie Ophalen (var AInvoer: draad;
const ADelim: draad = ' ';
const ADelete: Boolean = true)
: draad;
var
iPos: geheel getal;
beginnen
als ADelim = # 0 begin dan
// AnsiPos werkt niet met # 0
iPos: = Pos (ADelim, AInput);
anders begint
iPos: = Pos (ADelim, AInput);
einde;
als iPos = 0 begin dan
Resultaat: = AInput;
als ADelete begin dan
AInput: = '';
einde;
anders begint
resultaat: = Kopiëren (AInput, 1, iPos - 1);
als ADelete begin dan
Verwijderen (AInput, 1, iPos + Length (ADelim) - 1);
einde;
einde;
einde;
procedure TranslateStringToTInAddr (AIP: draad; var AInAddr);
var
phe: PHostEnt; pac: PChar; GInitData: TWSAData;
beginnen
WSAStartup ($ 101, GInitData);
proberen
phe: = GetHostByName (PChar (AIP));
als Toegekend (phe) dan beginnen
pac: = phe ^ .h_addr_list ^;
als Toegewezen (pac) vervolgens
beginnen
met TIPAddr (AInAddr) .S_un_b beginnen
s_b1: = Byte (pac [0]); s_b2: = Byte (pac [1]); s_b3: = Byte (pac [2]); s_b4: = Byte (pac [3]);
einde;
einde
anders
beginnen
verhogen Uitzondering. Create ('Fout bij ophalen van IP van HostName');
einde;
einde
anders
beginnen
verhogen Uitzondering. Create ('Fout bij ophalen HostName');
einde;
behalve
FillChar (AInAddr, SizeOf (AInAddr), # 0);
einde; WSACleanup;
einde;
functie Ping (InetAddress: draad): boolean;
var
Handvat: handvat;
InAddr: IPAddr;
DW: DWORD;
vertegenwoordiger: matrix[1..128] van byte;
beginnen
resultaat: = false; Handvat: = IcmpCreateFile;
als Handle = INVALID_HANDLE_VALUE vervolgens
Uitgang;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Handle, InAddr, nihil, 0, nihil, @rep, 128, 0); Resultaat: = (DW 0); IcmpCloseHandle (Handle);
einde;
einde.