|
|
|
|
- Esta lección abarcará los siguientes temas
- Presentación
- Aplicación Servidor: servidor simplificado
- Creación del socket
- Intercambio de datos
- Cierre del socket
- Aplicación Cliente
- Conexión al servidor
- Intercambio de datos
- Fin de la comunicación
- Ejemplo práctico
- Prueba del ejemplo
- Análisis del código utilizado
Esta lección abarcará los siguientes temas - Presentación.
- Aplicación Servidor.
- Aplicación Cliente.
WINDEV incluye funciones avanzadas de gestión de sockets. Un socket es un recurso utilizado por las aplicaciones para comunicarse de un equipo a otro, independientemente del tipo de red. Este modo de comunicación se utiliza para establecer la comunicación entre dos aplicaciones que se encuentran en equipos diferentes (conectados a través de Internet o en la misma red local) o en el mismo equipo. Las aplicaciones WINDEV pueden gestionar sockets según diferentes modos: - Aplicación WINDEV Cliente: la aplicación se conecta a cualquier servidor e intercambia datos a través de un socket.
- Aplicación WINDEV, WEBDEV o WINDEV Mobile "Servidor": la aplicación WINDEV, WEBDEV o WINDEV Mobile es un servidor que intercambia información a través de sockets con distintas máquinas cliente. Para gestionar varias conexiones simultáneas, es necesario utilizar hilos.
| | | | Ejemplo | WINDEV incluye un ejemplo didáctico que permite entender el uso de los sockets: "WD Using sockets". Puede acceder a este ejemplo desde la página de inicio de WINDEV (Ctrl + <). |
Aplicación Servidor: servidor simplificado WINDEV le ofrece la posibilidad de crear un servidor de sockets simplificado. Este servidor establece la comunicación con un solo equipo cliente a la vez. Este tipo de aplicación es muy útil cuando se debe establecer una comunicación entre dos aplicaciones remotas. Las etapas para crear un servidor simplificado son las siguientes: - Creación del socket.
- Intercambio de datos.
- Cierre del socket.
Creación del socket Para crear el socket, el servidor utiliza la función SocketCreate. Un socket está enlazado a un puerto específico. Para utilizar sockets fácilmente mediante programación en el servidor, especifique el nombre del socket. La máquina cliente se conectará al socket para intercambiar datos. La conexión se establecerá realmente cuando las dos máquinas intercambien datos por primera vez (es decir, cuando el servidor lea la información por primera vez). La conexión se establece la primera vez que la función SocketRead lee la información en el servidor. Intercambio de datos Cuando dos máquinas utilizan el mismo socket, se establece un flujo de comunicación entre ellas. Estas dos máquinas pueden leer y escribir cadenas de caracteres en el socket. Observación: Para no bloquear las aplicaciones, los mensajes entrantes se pueden gestionar mediante un hilo específico. Para leer y escribir datos en el socket, la aplicación servidor de WINDEV debe utilizar las funciones SocketRead y SocketWrite. Atención: Para iniciar una operación de lectura, debe haberse realizado previamente una operación de escritura. Por ejemplo: - La máquina cliente escribe en el socket: envía una solicitud al servidor.
- El servidor lee los datos del socket en un hilo. Cuando se recibe un mensaje, el servidor lo procesa.
- Si se requiere una respuesta al mensaje, el servidor identifica la máquina cliente (función SocketClientInfo) y envía una respuesta.
Cierre del socket Para finalizar la comunicación, el servidor puede cerrar el socket con la función SocketClose. Observación: la máquina cliente también puede cerrar el socket. Una aplicación cliente de un servidor de sockets se conecta a un servidor estándar para intercambiar información a través de un socket. Ejemplo: Una aplicación WINDEV cliente puede conectarse a un servidor de noticias estándar en Internet. Los pasos para crear una aplicación cliente son los siguientes: - Conexión al servidor
- Intercambio de datos.
- Fin de la comunicación
Conexión al servidor Para conectarse a un socket del servidor, utilice la función SocketConnect. Esta función realiza una solicitud de conexión al servidor. El socket se identifica por su puerto y dirección. Intercambio de datos Cuando dos máquinas utilizan el mismo socket, se establece un flujo de comunicación entre ellas. Estas dos máquinas pueden leer y escribir cadenas de caracteres en el socket. Observación: Para no bloquear las aplicaciones, los mensajes entrantes se pueden gestionar mediante un hilo específico. Para leer y escribir datos en el socket, la aplicación cliente WINDEV debe utilizar las funciones SocketRead y SocketWrite. Fin de la comunicación Para finalizar la comunicación, cierre el socket desde la máquina cliente con la función SocketClose. Observación: también puede finalizar la comunicación desde el servidor. Veremos un ejemplo real sobre la programación de sockets a través del ejemplo unitario "Using sockets". Prueba del ejemplo - Abra el ejemplo unitario "Using sockets".
- Pruebe la ventana "WIN_Socket". Se enviará un mensaje de la máquina B a la máquina A. La máquina A es la aplicación Servidor y la máquina B es la aplicación Cliente.
- En la máquina A, haga clic en el botón "Create" para crear el socket.
- La máquina B puede conectarse al socket creado por la máquina A. Haga clic en el botón "Connect" (en la sección Computer B).
- La máquina B envía un mensaje a la máquina A:
- Escriba el mensaje que desea enviar en el campo "Sentence to send to computer A".
- Haga clic en "Send" en el área "Computer B".
- Para recuperar el mensaje en la máquina A, haga clic en el botón "Get" en el área "Computer A".
- Haga clic en los botones "Disonnect" para desconectar las dos máquinas.
- Detenga la prueba de la ventana para volver al editor.
Análisis del código utilizado - Veamos el código de los diferentes botones que hemos utilizado.
- Primero, analizaremos los procesos realizados por el servidor de sockets (máquina A).
- Abra el código del botón "Create" en el área "Computer A":
- Seleccione el botón "Create".
- Pulse F2 para abrir los eventos.
- En el evento "Clic", verá la función SocketCreate, que permite crear el socket. Cierre el editor de código.
- Abra el código del botón "Get" en el área "Computer A":
- Seleccione el botón "Get".
- Pulse F2 para abrir los eventos.
- El siguiente código se utiliza en el evento "Clic":
EDT_SentenceReceivedFromComputerB = SocketRead("ComputerA", False, 2000) IF EDT_SentenceReceivedFromComputerB <> "" THEN Info("Message received from the IP address # " + SocketClientInfo("ComputerA", SocketAddress)) END
La función SocketRead lee el socket creado anteriormente. El mensaje leído se muestra inmediatamente en el control "EDT_SentenceReceivedFromComputerB". Cierre el editor de código.
- Veamos los procesos realizados por el cliente (máquina B).
- Abra el código del botón "Connect" en el área "Computer B":
- Seleccione el botón "Connect".
- Pulse F2 para abrir los eventos.
- En el evento "Clic", verá la función SocketConnect, que permite conectarse al socket creado por la máquina A. Cierre el editor de código.
- Abra el código del botón "Send" en el área "Computer B":
- Seleccione el botón "Send".
- Pulse F2 para abrir los eventos.
- El siguiente código se utiliza en el evento "Clic":
IF NOT SocketWrite("ForComputerA", EDT_SentenceToSendToComputerA) THEN Error(ErrorInfo(errMessage)) RETURN END
SocketWrite envía un mensaje al socket al que está conectado la máquina B. Cierre el editor de código.
Observación: En esta lección, hemos visto una comunicación "simple" entre un servidor y una máquina cliente: el cliente envía mensajes y el servidor los procesa. También es posible crear aplicaciones más complejas. La comunicación también puede establecerse entre dos aplicaciones, tanto cliente como servidor. En este caso, los hilos son muy útiles para gestionar los mensajes enviados y las respuestas.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|