PDA

Ver la Versión Completa : Como Limpiar BytesReceived de Ping componente Indy


chartres
07-10-2011, 23:24:46
Hola
tengo una aplicacion para hacer pings a varios servidores (componente Indy IdIcmpClient)
y verifica si le regresa datos o BytesRecived y pone una palomita de ok.

pero el problema esque cuando hace un ping y no encuentra el host
al hacer la verificacion si recibio bytes, guarda los bytes de el ping anterior y hace como si si hubiera resultados.

Alguien sabe como limpiar esos BytesRecived antes de hacer un nuevo ping, o algo que reinicie el componente.

codigo para comparar respuesta

if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then


Gracias

ecfisa
08-10-2011, 20:23:34
Hola.

No conozco mucho sobre la clase TIdIcmpClient, pero se me ocurre que podrías probar creando una nueva instancia para cada petición, y luego de realizar las acciones liberarla. De ese modo la propiedad BytesReceived debería quedar limpia en cada nuevo Ping.


with TIdicmpClient.Create(nil) do
try
BufferSize:= 8192;
ReceiveTimeOut:= 600;
Protocol:= 1;
Host:= XXX; // variable con la dirección
Ping;
// comprobaciones que realices:
// almacenar, evaluar o mostrar resultados
finally
Free;
end;


Saludos.

escafandra
09-10-2011, 01:00:08
No me gustan mucho los componentes de terceros. Si quieres puedes usar esta función (http://clubdelphi.com/foros/showpost.php?p=414988&postcount=9) para realizar ping sólo con la API de Windows.

Saludos.

chartres
10-10-2011, 19:01:05
Muchas gracias por las ideas.

Para el usuario escafandra, te comento que probe la otra opcion para realizar ping y al parecer me funciona, Gracias.
solo una duda, veo que mencionas algo de que si es por proxy puede no funcionar.

Te comento mi caso y para que usaria el ping:

Es una aplicacion para revisar la conexion a servidores de base de datos, no es ping a direcciones de internet, sino de red, servidores SQL, ORACLE etc, ya que en mi trabajo usamos varios sistemas y muchos usuarios y se penso hacer una aplicacion de diagnostico para soporte, y parte del diagnostico es revisar si hay red y hacer ping a los servidores para probar las conexiones.

Bueno ya sabiend esto, cres que el ping por medio de la API me funcione bien o mejor para mi caso.

Gracias nuevamente.

escafandra
10-10-2011, 21:53:48
El proxy sólo interfiere para la conexión a internet. En la red local el ping va a funcionar perfectamente. Funcionalmente no deben existir diferencias entre un ping con la API pura o con componentes, salvo que, en este segundo caso, tu ejecutable crece mas y puede ser mas lento.

Cuando sugerí mi función para realizar ping sin componentes lo hice pensando en el problema que comentaste con el buffer de respuesta, ya que mi función no plantea ese problema.

Saludos.

chartres
21-10-2011, 22:15:14
Pues les comento que implemente bien el codigo y la funcion del Ping con la API, pero ya cuando lo lanzamos resulto con que trabajo bien en Win 7 y XP, pero en Windows 2000 el cual todavia tenemos algunos usuarios, marco error la aplicacion, referente ala API.

Quiza sea porque win 2000 tenga un dll diferente que en xp o w7.

escafandra
21-10-2011, 23:56:32
Habría que ver que tipo de error da y que Windows 2000 tienen:
Minimum supported client: Windows 2000 Professional

Saludos.

jesconsa
23-11-2011, 19:36:27
Tengo el mismo problema. He tratado de explicarlo en otro hilo similar. Me gustaria no claudicar y seguir con Indy....es como si los Threads no estuvieran aislados y se cogiera el AReplyStatus de uno a otro.....

Saludos
Jesus

ramflores
12-06-2014, 20:24:10
Hola.

buscando encontre este hilo, estoy tratando de probar la funcion, pero existen algunas variables que me dice que no existen, que uses debo tener declaradas?

Gracias de antemano