Conexión Inversa

También podría gustarte

Está en la página 1de 5

Conexión inversa

Usando los componentes TClientSocket y TserverSocket

En un artículo anterior vimos lo que era una conexión básica cliente servidor aprendimos
como funcionaba y como implementarla usando Delphi 7 y dos componentes muy potentes.

La conexión inversa es algo así como un "paradigma en la programación", que bien como
los que ya saben, en una conexión cliente servidor el cliente se conecta al servidor y
controla todo desde su máquina.

Sin embargo una conexión inversa se refiere literalmente a que el servidor se conecte al
cliente y este puede realizar funciones sobre el cliente, es algo bastante raro pues rompería
el protocolo que ya conocemos, pero en realidad no es así.

En la práctica en realidad el servidor no se conecta al cliente, de hecho la conexión inversa


no existe, simplemente es una técnica para pasar los routers y firewalls que ya desde su uso
masivo traen problemas ya que en una conexión básica siempre necesitaremos saber la IP
del servidor, si su IP es dinámica perderemos el control en cualquier momento.

Programación del "cliente" (Servidor)

Paso 1:
Agregamos el componente TServerSocket.

Paso 2:
En el evento OnCreate de nuestro form agregamos los parámetros para poner a la escucha:

1. procedure TForm1.FormCreate(Sender: TObject);


2. begin
3. ServerSocket1.Port:= 1234; // O puede ser directo de un TEdit (Este
es el puerto)
4. ServerSocket1.Active:= True; // Lo activamos
5. ServerSocket1.Open; // Se abre la conexión
6. end;

(O podemos crear un botón que lea desde un TEdit y conecte... es como mucho mejor)

Con eso ya está nuestro Cliente (Servidor), pero igual... podemos agregar más cosas para
mejorar, vamos a los eventos de nuestro componente TServerSocket.

Paso 3:
Agregamos los eventos de control...
En el evento OnClientError agregamos esto:

pascal Código:

1.procedure TForm1.ServerSocket1ClientError(Sender: TObject;


2.  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
3.  var ErrorCode: Integer);
4.begin
5.ErrorCode:= 0;
6.end;

Es por si se produce un error entonces mostramos un mensaje o simplmente lo anulamos


usando la constante ErrorCode (vean como esta declarada en el procedure como integer),
así que pongo 0 (cero).

Ahora cuando acepte una conexión quiero que me avise, entonces en el evento
OnClientConnect agregamos:

pascal Código:

1.procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;


2.  Socket: TCustomWinSocket);
3.begin
4.Label1.Caption:= 'Estado: Conectado';
5.end;

Y en el evento OnClientDisconnect:

pascal Código:

1.procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;


2.  Socket: TCustomWinSocket);
3.begin
4.Label1.Caption:= 'Estado: Desconectado';
5.end;
Claramente los mensajes se muestran en un Label pero pueden ponerlo desde un Statusbar.

Paso 4:
Ahora deben poner las funciones, es decir la información que mandaremos a la otra pc...

Entonces en un botón lo que quieran ponen en orden los parámetros, primero el nombre del
ocmponente, luego la constante "Socket" (que es donde recibe o envía datos... por cierto
está constante se declara automáticamente...), luego el parámetro connections que indica a
cuál de los ordenadores conectados queremos enviar un mensaje (entonces como si fuera un
arreglo o matriz ponemos la posición de la conexión

Y por último el parametro SendText(), para envíar una cadena de caracteres)

pascal Código:

1.procedure TForm1.Button2Click(Sender: TObject);


2.begin
3.ServerSocket1.Socket.Connections[0].SendText('adios');
4.end;

Eso es por si es solo una conexión, para los multiconexión es un poquito diferente...
y listo eso es todo para nuestro Cliente (servidor).

Programando el "Servidor" (Cliente)

Bueno ahora programaremos lo que supuestamente llaman en los foros el "servidor", que en
realidad viene siendo el cliente, simplemente porque así es la conexión inversa...

Paso 1:
Agregamos el componente TClientSocket.

Paso 2:
Ahora en el evento OnCreate del formulario cambiamos los parámetros de nuestro cliente
para que empiece a buscar conexiones.

pascal Código:
1.ClientSocket1.Address:= '127.0.0.1'; // esta es la IP REMOTA
(nuestra IP o no-ip), pueden crear un Edit server
2.ClientSocket1.Port:= 1234; // el puerto
3.ClientSocket1.Active:= True; // activamos
4.ClientSocket1.Open;

paso 3:
Ahora empezaremos a programar las funciones que recibe del computador que nos
controla... hacemos clic en ell evento OnRead y agreamos...

pascal Código:

1.procedure TForm1.ClientSocket1Read(Sender: TObject;


2.  Socket: TCustomWinSocket);
3.  var
4.  tales: String; // variable para guardar datos recibidos
5.begin
6.tales:= Socket.ReceiveText; // Con esto ponemos en la variable
string todo lo que recibimos
7.If tales = 'hola' Then // si el string recibido es hola que
ejecute una función...
8.Begin
9.ShowMessage('Te saludan');
10. End;
11.  
12. If tales = 'adios' Then // si el string recibido es
adios.. que ejecute otra función...
13. Begin
14. ShowMessage('Se despiden de ti');
15. End;
16.  
17. end;

O pueden hacerlo con Case es como mejor también ...


Y bueno en los demás eventos de nuestro servidor (Cliente) hacemos lo mismo que en
nuestro Cliente:

pascal Código:
1.procedure TForm1.ClientSocket1Error(Sender: TObject;
2.  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
3.  var ErrorCode: Integer);
4.begin
5.ErrorCode:= 0;
6.end;

Por ejemplo en el evento OnClientError ponemos lo mismo que en el cliente... para que
controle los errores...

Una aplicación de este tipo es verdaderamente útil cuando alguna empresa de servicios IT
necesite ofrecer soporte remoto, tu podrías desarrollar una aplicación con este tipo de
conexión.

También podría gustarte