En este articulo se muestra como podemos agregar un socket (winsock) a una pagina HTML (tambian ASP, PHP, etc.) y poner manupularlo utilizando lenguajes del explorador (IE, FireFox) como javascript o vbscript.
Este es el ejemplo que se ira describiendo.
Aunque aqui se utiliza javascript, sera unicamente para validaciones (aunque se podrian haber hecho tambien con vbscript). Mayormente se utilizara vbscript para modificar parametros del socket, tambien para enviar/recibir informacion asi como responder a los eventos que se generen.
Para agregar un socket a nuestra pagina tenemos que utilizar el tag OBJECT de esta manera:
El parametro mas importante que tenemos que observar es classid. Si este parametro estuviera incorrecto simplemente no podriamos hacer nada. A este socket se le ha asignado el nombre socket.
Los parametros que debemos cambiar con nuestro codigo son RemoteHost y RemotePort. En ellos pondremos el nombre/IP del servidor al que nos queremos conectar asi como el puerto en ese servidor.
Tenemos que declarar las funciones que procesaran los eventos que genere el socket. Son 3 principalmente:
Con este codigo declaramos las funciones que procesaran los eventos:
El atributo for indica para cual de los objetos se esta declarando el evento.
El atributo event indica cual es el evento que se procesara
Entre los tag SCRIPT se pone el nombre de la funcion
En la pagina de ejemplo aparece un SELECT en el que las opciones son distintas direcciones (FTP y HTTP) y el puerto al que se deben conectar. Si se selecciona la primer opcion, la pagina intentara conectarse por FTP a la pagina indicada utilizando el usuario y la contraseƱa que aparecen ahi mismo. Cuando seleccionamos la segunda opcion, la pagina se conectara e intentara mostrar el codigo HTML de la pagina principal del sitio indicado.
La pagina incluye otro archivo con las funciones que realizaran todo el trabajo: 55_socket.vbs
Se declaran 2 variables. La primera guarda la hora en que se inicia la conexion y la segunda el tiempo maximo que debera intentarse abrir la conexion.
La funcion recibe como parametros el servidor y el puerto al que se tendra que conectar el socket. Primero se verifica que el socket en realidad exista. Luego, si el socket esta aun conectado, cerrar la conexion. Despues cambiamos los parametros necesarios (RemoteHost y RemotePort), luego intentar abrir la conexion. Guardamos la hora actual. Por ultimo se crea un timer que se estara ejecutando mientras dure el intento de conexion.
Esta es la segunda parte de la conexion. Se ejecutara cada 100 ms hasta que se logre conectar o se alcance el tiempo maximo.
Verificamos los distintos estados del socket. Solamente en los que se este aun intentando hacer la conexion, asignamos el valor 1 a la variable continuar. En la parte donde se verificar continuar = 1, se revisa si se alcanzo el tiempo maximo para la conexion. Si es asi, entonces se muestra un mensaje de error. En caso contrario, se crea de nuevo un timer para continuar intentado conectarnos.
Cuando se ejecuta el evento Connect, se manda llamar esta funcion:
Se verifica a que puerto se esta conectando y dependiendo de eso, el socket enviara una cadena distinta.
La siguiente funcion se ejecuta cuando el socket lanza el evento Close.. Unicamente mostramos un mensaje
La funcion leerVB se manda llamar cuando el evento DataArrival es lanzado por el socket. Esto significa que hay que leer datos del buffer. El texto leido se coloca en el TEXTAREA de la pagina. Si tratamos de conectarnos por FTP, se recibiran otros mensajes del servidor pidiendo usuario. O si ya logramos conectarnos, simplemente mandamos el comando QUIT para cerrar la conexion.
Por ultimo, la funcion escribirVB unicamente escribe en el socket la cadena que recibe como parametro.