![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Por que cuando intento hacer ping con ese componente de la Indy desde una seccion que no es administrador en Windows XP SP2 me aparece el siguiente error.
Código:
Socket Error # 10013 Access denied. |
|
#2
|
|||
|
|||
|
Hola. Eso pasa como ya habras visto por otros sitios porque la manera que tiene Indy de hacer el ping es a traves del Winsock 2 que tiene elementos de seguridad que le obligan a pasar por el Firewall. En cambio el Ping que utilizas en Windows es a traves de una dll, ICMP.DLL creo recordar, y esta dll es con raw sockets no sujetas a esas directivas de seguridad, por eso puedes hacer un ping desde el interprete de comandos sin tener que tocar el Firewall. Es la primera vez que hablo por aqui, no seais muy duros conmigo.
Saludos |
|
#3
|
|||
|
|||
|
Perdon, ICMP.DLL no es raw sockets. Una pregunta por si alguien me da alguna pista. LLevo algunos dias con IcmpClient de Indy y todo va bien, o casi. Lo que hago es una llamada en bucle para crear threads para hacer pings a equipos. No he reinventado la rueda sino que he estado mirando una rutina en Internet de alguien que ya la hizo. la rutina del ejecutable del Thread es la siguiente:
procedure TPingThread.Execute; var rp:TReplyStatus; begin FErrorCount := 0; FAlarmed := false; Ping := TIdIcmpClient.Create(nil); Ping.FreeOnRelease; Ping.Host := FHost; Ping.PacketSize:=16; Ping.OnReply := PingReply; Ping.ReceiveTimeout := 1000; try // Lanzar el PING Ping.Ping; finally FreeAndNil(Ping); end; end; procedure TPingThread.PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus); begin if (AReplyStatus.ReplyStatusType = rsTimeOut) or (AReplyStatus.ReplyStatusType = rsErrorUnreachable) then begin Form1.Memo1.Lines.Add('Equipo caido.'); end else begin Form1.Memo1.Lines.Add('Equipo OK'); end; end; Si comienzo el thread con Resume o Start para dos equipos (dos threads) resulta que si el primero tiene conexion y el segundo no, lo muestra bien en el Memo ,...pero si el primero NO tiene conexion y el segundo si, en el Memo se ve como el segundo da su mensaje de 'Equipo OK' y al llegar el Reply del primero (Timeout) me aparece tambien 'Equipo OK' como si fuera el otro equipo, es decir, cuando llega el timeout de uno es como si los Threads no estuvieran bien difrenciados y toma los datos del ultimo Thread que se ejecuto.......He probado con Synchronize y este tipo de cosas pero no he funcionado.... Alguna pista please? Muchas gracias Jesus |
|
#4
|
||||
|
||||
|
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Ping en segundo plano | toorbye | Internet | 5 | 19-10-2006 13:52:32 |
| ping a las computadoras | chucoptero | Internet | 7 | 20-01-2006 18:47:18 |
| ejecutar accion en un cliente | fartycl | Varios | 4 | 03-10-2005 03:20:12 |
| Ping no funciona | Sirkius | Internet | 1 | 16-09-2004 19:13:45 |
| ping | NuncaMas | Varios | 5 | 30-10-2003 21:39:14 |
|