pencereler belirli bir ana bilgisayarın kullanılabilir olup olmadığını belirlemek için bir Internet Denetim İletisi Protokolü'nü (ICMP) destekler. ICMP, Internet ana bilgisayarları arasında akış denetimi, hata mesajları, yönlendirme ve diğer verileri sağlayan bir ağ katmanı protokolüdür. ICMP öncelikle uygulama geliştiricileri tarafından bir ağ ping işlemi için kullanılır.
Ping Nedir?
Ping, IP adresine bir yankı mesajı gönderme ve arasındaki bağlantıyı doğrulamak için yanıtı okuma işlemidir TCP / IP ana bilgisayarları. Yeni bir uygulama yazıyorsanız, içinde uygulanan Winsock 2 ham yuva desteğini kullanmak daha iyi olacaktır. Indy, Örneğin.
Ancak, Windows NT ve Windows 2000 uygulamaları için Raw Sockets güvenlik denetimlerine tabi olduğunu ve yalnızca yönetici grubunun üyeleri tarafından erişilebilir olduğunu lütfen unutmayın. Icmp.dll, geliştiricilerin Windows sistemlerine Winsock 2 desteği olmadan Internet ping uygulamaları yazmasına olanak tanıyan işlevler sağlar.
Winsock 1.1 WSAStartup işlevi ICMP.DLL tarafından maruz bırakılan işlevleri kullanmadan önce çağrılması gerektiğini unutmayın. Bunu yapmazsanız, ilk IcmpSendEcho çağrısı 10091 hatasıyla (WSASYSNOTREADY) başarısız olur.
Aşağıda Ping biriminin kaynak kodunu bulabilirsiniz. İşte iki kullanım örneği.
Örnek 1: Kod Parçacığı
kullanımları Ping; ...
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
beginIf Ping. Ping (ADP_IP) sonra ShowMessage ('Delphi Programlama'ya ulaşılabilir!');
son;
Örnek 2: Konsol Modu Delphi Programı
Bir sonraki örneğimiz bir konsol modu Delphi programı Ping birimini kullanan: Ping biriminin kaynağı:
birim Ping;
interfaceuses
Windows, SysUtils, Sınıflar;
tip
TSunB = paketlenmiş kayıt
dosyalama1, dosyalama2, dosyalama3, dosyalama4: bayt;
son;
TSunW = paketlenmiş kayıt
s_w1, s_w2: sözcük;
son;
PIPAddr = ^ TIPAddr;
TIPAddr = kayıt
durum tamsayı nın-nin
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: longword);
son; IPAddr = TIPAddr;
fonksiyon IcmpCreateFile: Thandle; stdcall; dış 'İcmp.dll';
fonksiyon IcmpCloseHandle (icmpHandle: THandle): boolean;
stdcall; dış 'İcmp.dll'
fonksiyon IcmpSendEcho
(IcmpHandle: Thandle; HedefAdresi: IPAddr;
RequestData: İşaretçi; RequestSize: Küçük;
RequestOptions: işaretçi;
ReplyBuffer: İşaretçi;
ReplySize: DWORD;
Zaman aşımı: DWORD): DWORD; stdcall; dış 'İcmp.dll';
fonksiyon Ping (InetAddress: sicim): boolean;
implementationuses
WinSock;
fonksiyon (Getirmevar AInput: sicim;
const ADelim: sicim = ' ';
const ADelete: Boolean = doğru)
: sicim;
var
iPos: Tamsayı;
başla
Eğer ADelim = # 0 o zaman başla
// AnsiPos # 0 ile çalışmıyor
iPos: = Konum (ADelim, AInput);
başka son başlar
iPos: = Konum (ADelim, AInput);
son;
Eğer iPos = 0 o zaman başla
Sonuç: = AInput;
Eğer ADelete o zaman başla
AInput: = '';
son;
başka son başlar
sonuç: = Kopyala (AInput, 1, iPos - 1);
Eğer ADelete o zaman başla
Sil (AInput, 1, iPos + Uzunluk (ADelim) - 1);
son;
son;
son;
prosedür TranslateStringToTInAddr (AIP: sicim; var AInAddr);
var
phe: PHostEnt; pac: PChar; GInitData: TWSAData;
başla
WSAStartup ($ 101, GInitData);
Deneyin
phe: = GetHostByName (PChar (AIP));
Eğer Atandı (phe) thenbegin
pac: = phe ^ .h_addr_list ^;
Eğer Atandı (pac) sonra
başla
ile TIPAddr (AInAddr) .S_un_b başla
yüzükçü1: = Bayt (pac [0]); yüzükçü2: = Bayt (pac [1]);
son;
son
Başka
başla
yükseltmek İstisna. Oluştur ('Ana MakineAdından IP alınırken hata oluştu');
son;
son
Başka
başla
yükseltmek İstisna. Oluştur ('Ana MakineAdı alınırken hata oluştu');
son;
dışında
FillChar (AInAddr, SizeOf (AInAddr), # 0);
son; WSACleanup;
son;
fonksiyon Ping (InetAddress: sicim): boolean;
var
Kolu: Thandle;
InAddr: IPAddr;
DW: DWORD;
rep: dizi[1..128] nın-nin bayt;
başla
sonuç: = yanlış; Tanıtıcı: = IcmpCreateFile;
Eğer Tanıtıcı = INVALID_HANDLE_VALUE sonra
Çıkış;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Tanıtıcı, InAddr, sıfır, 0, sıfır, @rep, 128, 0); Sonuç: = (DW0); IcmpCloseHandle (Kulp);
son;
son.