10 octubre 2008

Creando un cliente de Telnet

Si en artículo anterior vimos como crear un servidor de Telnet, teníamos el inconveniente de utilizar como cliente el programa Telnet.exe que trae por defecto Windows. Aunque hay muchos clientes de Telnet tanto de pago como libres vamos a ver como crear el nuestro propio.

CREANDO LA VENTANA DEL CLIENTE

Creamos un nuevo proyecto cuyo formulario principal se compone de estos componentes:


Contiene dos componentes de la clase TEdit llamados IPServidor y Puerto, así como un botón llamado BConectar. Insertaremos un componente TMemo llamado Log el cual vamos a utilizar para mostrar el texto del terminal al conectarse y el componente TIdTelnet que llamaremos Telnet y que se encuentra en la pestaña de componentes Indy Clients.

CONECTANDO CON EL SERVIDOR

Al pulsar el botón Conectar incluimos este código:

procedure TFClienteTelnet.BConectarClick(Sender: TObject);
begin
Telnet.Host := IPServidor.Text;
Telnet.Port := StrToInt( Puerto.Text );
Telnet.Connect;
Log.SetFocus;
end;

Es tan sencillo como indicarle la IP del servidor, el puerto y conectar. Después de conectarse mandamos el foco al memo para que el usuario pueda escribir en el terminal.

En el evento OnConnect del componente Telnet confirmamos la conexión por pantalla:

procedure TFClienteTelnet.TelnetConnect(Sender: TObject);
begin
Log.Lines.Add( 'Conectando con ' + Telnet.Host + '.' );
Log.Lines.Add( '' );
end;

RECIBIENDO LA INFORMACIÓN DEL SERVIDOR

Una vez conectados, es el servidor el que nos manda el texto del terminal a través del evento OnDataAvailable:

procedure TFClienteTelnet.TelnetDataAvailable(Sender: TIdTelnet;
const Buffer: string);
begin
Log.Text := Log.Text + Buffer;
Log.SelStart := Length( Log.Text );
end;

Cuando el servidor nos mande el texto lo introducimos en el campo memo y situamos el cursor en la última línea para que el usuario pueda seguir escribiendo.

PROCESANDO LOS COMANDOS

Para procesar los comandos que vamos a escribir en nuestro terminal vamos a crear una variable privada a nivel de formulario llamada sComando:

...
private
{ Private declarations }
sComando: String;
...

Y en el evento OnKeyPress del campo memo llamado Log hacemos lo siguiente:

procedure TFClienteTelnet.LogKeyPress(Sender: TObject; var Key: Char);
begin
if not Telnet.Connected then
Exit;

if Key = #13 then
begin
Telnet.Socket.WriteLn( sComando );
sComando := '';
end
else
sComando := sComando + Key;
end;

Si el usuario no ha pulsado la tecla Intro vamos añadiendo letras al comando hasta que la pulse. Entonces enviamos el comando al servidor y volvemos a vaciar la variable sComando para la siguiente instrucción.

PROBANDO LA CONEXIÓN

Pues con sólo lo que hemos hecho ya tenemos un minicliente de Telnet que vamos a probar en el mismo PC con el servidor que creamos en el artículo anterior:


Como podeis apreciar en la imagen (hacer clic para ampliar) cuando introducimos el usuario admin y la clave 1234 el servidor de telnet nos devuelve un eco con lo tecleado, aunque luego una vez dentro se comporta de manera normal.

Con un par de programas como este bien realizados se puede crear un servicio de teletexto entre varias empresas que funciona a una velocidad mucho más rápida que mediante páginas web.

Pruebas realizadas en RAD Studio 2007.

Publicidad