Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con TIdTelnet para varias PCs. (https://www.clubdelphi.com/foros/showthread.php?t=24555)

bustio 25-08-2005 15:09:26

Problemas con TIdTelnet para varias PCs.
 
HOla comunidad!!!
Tengo un problema que ya nos e como darle solucion. Resulta que tengo varias PCs con sus IPs y sus nombres en un StringGrid, y quiero hacer mediante Telnet un "open" a las PCs de esa lista mediante un puerto determinado. Para ello lo que hago es recorrer la StringList desde 0 hasta su Cant - 1 pero tengo problemas con el TIdTelnet. Veran, cuando en una PC esta instalado el MySQL, y se le envia esta cadena Telnet: "Open 172.16.xxx.xxx 3306", el MySQL esta escuchando por ese puerto y responde con una cadena de bytes donde los primeros corresponden a la version de MySQL instalado y los demas no son interesantes(al menos para mi caso). Entonces, lo que yo quiero es enviar este comando a cada una de las PCs de mi lista y ver cual me responde para guardar en otra lista los nombres de las PCs que respondieron ademas de la version de MySQL que es lo que envia la PC encuestada. Esto lo trato de hacer con un componente TIdTelnet, donde en el ciclo que recorre la lista le doy el Host y el Port.

Esta es la funcion en la que trato de hacer lo antes explicado:

Código:

function TFrmScanner.ServerExist(Port: Word; Host: String): Boolean;
begin
  IdTelnet.Host := Host;
  IdTelnet.Port := Port;
  try
    IdTelnet.Connect;
    ServerList.Add(Host);
    Result := True;
  except
    Result := False;
    IdTelnet.Disconnect;
  end;
end;

Hasta aqui todo bien... Si la CurrentHost al tratar deconectarse a ella por el puerto 3306 no lo permite envia esta excepcion :

Código:

Project ServersScanner.exe raised exception class EIdSocketError with message 'Socket Error # 10061
Connection refused.'. Process stopped. Use Step or Run to continue.

Significa que no hay MySQL en la PC en cuestion. Hasta aqi todo bien, pero al tratar deconectar a la segunda, se me salta esta otra excepcion:

Código:

Project ServersScanner.exe raised exception class EIdAlreadyConnected with message 'Already connected.'. Process stopped. Use Step or Run to continue.
Yo pense que el IdTelnet.Disconnect queya habia puesto garantizaba que esta ultima excepcion no ocurriera, pero evidentemente no es asi.

Para tratar de solucionar esto intente crear un IdTelnet en RunTime, de la siguiente manera:

Código:

function TFrmScanner.ServerExist(Port: Word; Host: String): Boolean;
Var
  IdTelnet : TIdTelnet;
begin
  IdTelnet := TIdTelnet.Create(Form1)
  IdTelnet.Host := Host;
  IdTelnet.Port := Port;
  try
    IdTelnet.Connect;
    ServerList.Add(Host);
    Result := True;
  except
    Result := False;
    IdTelnet.Disconnect;
    IdTelnet.Destroy;
  end;
end;

Pero tambien me da excepciones.
Alguien pudiera darme alguna idea??

dec 25-08-2005 16:27:34

Hola,

A lo peor me estoy equivocando, pero, creo que tendrías que utilizar "try...finally" y en la cláusula "finally", precisamente, desconectar. No digo que no uses "try..except", pero puedes usar entrambas, más o menos de este modo:

Código Delphi [-]
 function TFrmScanner.ServerExist(Port: Word; Host: String): Boolean;
 begin
   IdTelnet.Host := Host;
   IdTelnet.Port := Port;
   try
     try
       IdTelnet.Connect;
       ServerList.Add(Host);
       Result := True;
     except
       Result := False;
     end;
   finally
     IdTelnet.Disconnect;
   end;
 end;

(Por otro lado, en cualquier caso, por favor, edita tu mensaje, sitúa el código Delphi entre etiquetas [ DELPHI ] y ganaremos todos) ;)


La franja horaria es GMT +2. Ahora son las 19:15:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi