Ventanas admite un Protocolo de mensajes de control de Internet (ICMP) para determinar si un host particular está disponible o no. ICMP es un protocolo de capa de red que ofrece control de flujo, mensajes de error, enrutamiento y otros datos entre hosts de Internet. ICMP es utilizado principalmente por los desarrolladores de aplicaciones para un ping de red.
¿Qué es un ping?
Un ping es el proceso de enviar un mensaje de eco a una dirección IP y leer la respuesta para verificar una conexión entre TCP / IP hosts. Si está escribiendo una nueva aplicación, será mejor utilizar el soporte de sockets sin procesar de Winsock 2, implementado en Indy, por ejemplo.
Sin embargo, tenga en cuenta que para las implementaciones de Windows NT y Windows 2000, los Sockets sin procesar están sujetos a controles de seguridad y solo son accesibles para los miembros del grupo de administradores. Icmp.dll proporciona una funcionalidad que permite a los desarrolladores escribir aplicaciones de ping de Internet en sistemas Windows sin compatibilidad con Winsock 2.
Tenga en cuenta que se debe llamar a la función Winsock 1.1 WSAStartup antes de usar las funciones expuestas por ICMP.DLL. Si no hace esto, la primera llamada a IcmpSendEcho fallará con el error 10091 (WSASYSNOTREADY).
A continuación puede encontrar el código fuente de la unidad Ping. Aquí hay dos ejemplos de uso.
Ejemplo 1: fragmento de código
usos Silbido;...
const ADP_IP = '208.185.127.40'; (* http://delphi.about.com *)
comenzar si Silbido. Ping (ADP_IP) luego ShowMessage ('Acerca de la programación de Delphi alcanzable');
final;
Ejemplo 2: Programa Delphi en modo consola
Nuestro siguiente ejemplo es un modo de consola Programa de Delphi que usa la unidad Ping:. Aquí está la fuente de la unidad Ping:
unidad Silbido;
Interfaces
Windows, SysUtils, Clases;
tipo
TSunB = registro lleno
s_b1, s_b2, s_b3, s_b4: byte;
final;
TSunW = registro lleno
s_w1, s_w2: palabra;
final;
PIPAddr = ^ TIPAddr;
TIPAddr = grabar
caso entero de
0: (S_un_b: TSunB); 1: (S_un_w: TSunW); 2: (S_addr: palabra larga);
final; IPAddr = TIPAddr;
función IcmpCreateFile: THandle; stdcall; externo 'icmp.dll';
función IcmpCloseHandle (icmpHandle: THandle): boolean;
stdcall; externo 'icmp.dll'
función IcmpSendEcho
(IcmpHandle: THandle; DestinationAddress: IPAddr;
RequestData: puntero; RequestSize: Smallint;
RequestOptions: puntero;
ReplyBuffer: Puntero;
ReplySize: DWORD;
Tiempo de espera: DWORD): DWORD; stdcall; externo 'icmp.dll';
función Ping (InetAddress: cuerda): booleano;
implementación
WinSock;
función Ir a buscar(var AInput: cuerda;
const ADelim: cuerda = ' ';
const ADeletear: booleano = verdadero)
: cuerda;
var
iPos: entero;
empezar
Si ADelim = # 0 entonces comienza
// AnsiPos no funciona con # 0
iPos: = Pos (ADelim, AInput);
fin más comienza
iPos: = Pos (ADelim, AInput);
final;
Si iPos = 0 entonces comienza
Resultado: = AInput;
Si ADelete entonces comienza
AInput: = '';
final;
fin más comienza
resultado: = Copiar (AInput, 1, iPos - 1);
Si ADelete entonces comienza
Eliminar (AInput, 1, iPos + Longitud (ADelim) - 1);
final;
final;
final;
procedimiento TranslateStringToTInAddr (AIP: cuerda; var AInAddr);
var
phe: PHostEnt; pac: PChar; GInitData: TWSAData;
empezar
WSAStartup ($ 101, GInitData);
tratar
phe: = GetHostByName (PChar (AIP));
Si Asignado (phe) entonces comenzar
pac: = phe ^ .h_addr_list ^;
Si Asignado (pac) luego
empezar
con TIPAddr (AInAddr) .S_un_b empieza
s_b1: = Byte (pac [0]); s_b2: = Byte (pac [1]); s_b3: = Byte (pac [2]); s_b4: = Byte (pac [3]);
final;
final
más
empezar
aumento Excepción. Crear ('Error al obtener IP de HostName');
final;
final
más
empezar
aumento Excepción. Crear ('Error al obtener HostName');
final;
excepto
FillChar (AInAddr, SizeOf (AInAddr), # 0);
final; WSACleanup;
final;
función Ping (InetAddress: cuerda): booleano;
var
Manija: THandle;
InAddr: IPAddr;
DW: DWORD;
reps: formación[1..128] de byte;
empezar
resultado: = falso; Manejador: = IcmpCreateFile;
Si Handle = INVALID_HANDLE_VALUE luego
Salida;
TranslateStringToTInAddr (InetAddress, InAddr);
DW: = IcmpSendEcho (Handle, InAddr, nulo, 0, nulo, @rep, 128, 0); Resultado: = (DW 0); IcmpCloseHandle (Handle);
final;
final.