Una de las cosas más complejas con las que nos solemos enfrentar es el desarrollo de aplicaciones en los que tengamos que utilizar conexiones de red. Y no, con conexión de red no me refiero a comprobar simplemente si tenemos acceso a Internet o algo por el estilo, sino más bien a crear aplicaciones en las que respondamos a los eventos del tráfico generado vía web o, más complejo aún, montar nuestros propios sockets para gestionar el tráfico de red en bruto: desde las aplicaciones de mensajería de toda la vida a sistemas de protección en red o cualquier cosa a medio camino entre ambos.
Y si quieres ver hasta qué punto puede resultar un galimatías en otros entornos y lenguajes de desarrollo, puedes empezar por ver este vídeo de Aaron Hillegas (reputado autor sobre el lenguaje de programación Objective-C), donde queda bastante clara toda la parafernalia y código bastante críptico con el que hay que trabajar simplemente para enviar y recibir un paquete utilizando el protocolo UDP.
Afortunadamente, en Xojo todo es notablemente más sencillo y, de hecho, disponemos de varias clases a nuestro alcance para todas las cuestiones que tengan que ver tanto con los protocolos TCP/IP como con el menos utilizado pero muy práctico UDP.
Probablemente ya sepas, tal y como vimos en una anterior entrada, que si lo único que te preocupa o necesitas es mostrar contenido web, entonces todo lo que has de hacer es arrastrar un control HTMLViewer sobre la ventana que quieres que lo contenga.
A partir de ahí, un uso directo del método LoadURL es todo lo que necesitamos para cargar y mostrar el contenido correspondiente al URL indicado, además de que dicha operación se realzará de forma asíncrona, sin ver bloqueado el bucle de eventos principal. Todo ello sobre un motor de renderizado WebKit tanto en las versiones de OS X, como de Windows (aumentando el tamaño del ejecutable en 20 MB, eso sí) o bien usando el motor nativo, y también sobre Linux.
Sin embargo, el más sencillo de los controles que tienen algo que ver con tráfico de red, HTMLViewer, esconde bastante potencia en su interior. Por ejemplo, la que nos permite ejecutar el código JavaScript que indiquemos sobre la página (contexto) que esté actualmente cargado en el control.
Un lenguaje orientado a eventos
Por otra parte, también es aquí donde podemos ver las posibilidades que ofrece el lenguaje no sólo por ser orientado a objetos sino también orientado a eventos. ¿Qué significa esto? Por ejemplo, la capacidad del control para atrapar automáticamente los eventos correspondientes al cambio del modo de seguridad en la página (por ejemplo de HTTP a HTTPS), la cancelación en la carga de la página, o bien el inicio, finalización o progreso durante la carga de la página en cuestión, entre otros disponibles. Así, podemos incluir el código que queramos ejecutar en respuesta a cada uno de dichos eventos. Todo ello sin tener que lidiar en absoluto con nada que tenga que ver ni de lejos con sockets.
Ahora bien, existen ocasiones en los que conviene lidiar con los sockets, lo que significa bajar un grado en el nivel de abstracción para ganar en flexibilidad. Y en tales situaciones Xojo nos ofrece la clase HTTPSocket, donde podemos encontrar todo un ramillete de métodos y eventos para la gestión de la transmisión y recepción de datos mediante el protocolo HTTP (o HTTPS), y en cuyas propiedades es posible desde indicar la interfaz de red que deseamos utilizar, hasta otros valores como el puerto, o los valores correspondientes a la configuración de un proxy en el caso de que sea necesario.
El uso de HTTPSocket es de lo más variado, y por ejemplo te sorprenderías al saber las pocas líneas de código que se precisan para crear un lector RSS con Xojo mediante el uso de esta clase en combinación con la clase XMLReader. Por otro lado, si lo que buscas son conexiones HTTP seguras, entonces Xojo tiene a nuestra disposición la clase HTTPSecureSocket (personalmente la he utilizado en varias apps para tratar con APIs web, la implementación es tremendamente sencilla y te evitas que cualquiera pueda obtener información “fisgoneando” en el tráfico de red).
Bajar hacia el metal de red
Y si quieres bajar de nivel, aún encontrarás las clases TCPSocket y SSLSocket sobre las que se asientan las anteriores. Obviamente, a medida que bajamos hacia el metal iremos perdiendo todas las clases, eventos y propiedades relacionadas con la especialización que aportan las anteriores clases. A cambio, ganamos en código más compacto y mayor flexibilidad sobre lo que enviamos y esperamos recibir a través de nuestro socket TCP/IP. De hecho, esta es la clase que te permitirá crear programas en los que puedas conectar un ordenador a través de un puerto definido con cualquier otro ordenador que esté escuchando sobre el mismo puerto, independientemente de cuál sea su ubicación (siempre y cuando esté conectado en la red local o en Internet).
Aplicaciones de red
Y al igual que tenemos TCPSocket, en Xojo también encontramos la clase UDPSocket. A diferencia de TCP/IP, se trata de un protocolo de comunicaciones extremadamente rápido aunque para ello debemos de tener en cuenta que perdemos la garantía en llegarán todos los paquetes, y tampoco se asegura el orden en el que llegarán los paquetes a su destino.
En la parte que nos interesa, el uso de la clase UDPSocket es especialmente interesante por los tres modos que ofrece: unicast, broadcast y multicast. Especialmente esta última es la que, junto con la suma de los métodos JoinMulticastGroup
y LeaveMulticastGroup
, facilitan la creación de aplicaciones “tipo chat” de un modo pasmosamente fácil.
Por último, la clase utilizada para enviar y recibir la información propiamente dicha es Datagram, la correspondiente a los datagramas, y donde contamos con tres propiedades: dirección, puerto y datos.
Y si con EasyUDPSocket se facilita la creación y uso de conexiones de red que utilicen unicast, multicast o broadcast, también ocurre lo mismo con TCPSocket y EasyTCPSocket; esta última esta dirigida a facilita aun más el uso del protocolo TCP/IP en nuestra aplicaciones para aquellos usuarios con mínimos conocimientos en cuanto a protocolos de red.
Servidores de red, con los ojos cerrados
Por último, en Xojo también encontramos facilidades para la creación de nuestros propios servidores mediante el uso de la clase ServerSocket. En ella encontramos los métodos para indicar el puerto e interfaz en la que deseamos realizar la escucha, establecer la cantidad máxima de sockets que deseamos permanecer activos.
En definitiva, como has podido comprobar en este repaso, Xojo proporciona todo tipo de facilidades para crear aplicaciones de red a lo que debemos sumar la disponibilidad de código de ejemplo que en todo momento podemos utilizar como punto de partida para nuestros propios proyectos.