Está en la página 1de 4

1

Comunicación mediante el uso de Socket


Universidad Tecnológica de la Mixteca

Antonio Vásquez Eufracio

Resumen—Hoy en día existen diversos métodos de


comunicación entre procesos, unos de los más II. DESARROLLO
utilizados son los Sockets, en este documento se 1. Lo primero que se desarrollo fue un código
presenta la implementación de una interfaz gráfica para implementar un Servidor en la tarjeta
desarrollada en Netbeans bajo el lenguaje de NodeMCU ESP 8266, se utilizo un celular
programación Java haciendo uso de un Socket para crear una red wifi y poder crear un punto
para comunicar dicha interfaz con una tarjeta de acceso para conectar la tarjeta a la red
NodeMCU ESP 8266 para leer un dato analógico y creada y del mismo modo conectar el cliente
manipular una salida digital, todo esto mediante a la misma red. El servidor que se creo fue
una comunicación inalámbrica por medio de diseñado para poder enviar datos leídos de
WIFI. una entrada analógica de la tarjeta y poder
manipular una salida digital (para encender y
Index Terms—Socket, WIFI, NodeMCU ESP apagar un led) a través de peticiones que el
8266. cliente realiza hacia el servidor.

Lo primero que se hizo en el código del lado


I. INTRODUCCIÓN del servidor fue declara la contraseña y el
nombre de la red a la cual nos conectaremos,
En la actualidad muchas aplicaciones están así como el numero de puerto en el cual
implementadas usando sockets de forma interna. Por nuestro servidor estará escuchando las
ejemplo: los gestores de bases de datos relacionales, peticiones del cliente.
chats, herramientas para el control de versiones,
servicios en la nube, e incluso las páginas que
solicitamos en el internet se envían y reciben en los
browsers a través de sockets [1]. Por ello es
importante conocer que es un Socket, como se crean,
y como se pueden administrar para poder realizar una Figura 1. Declaración de contraseña, nombre y puerto para la
comunicación entre una PC y una tarjeta para conexión del servidor.
adquirir datos, por ejemplo.
Posteriormente después de tener designada la
Soket red a la cual nos conectaremos, se procede a
Los sockets (también llamados conectores) son un conectarnos a la red y cuando esto suceda la
mecanismo de comunicación entre procesos que función WiFi.localIP() nos devolverá la
permiten la comunicación bidireccional tanto entre dirección IP que se le asigno a nuestra tarjeta
procesos que se ejecutan en una misma máquina y con la cual el cliente se podrá conectar.
como entre procesos lanzados en diferentes
máquinas[2]. La comunicación entre procesos a
través de sockets se basa en la
filosofíaCLIENTESERVIDOR.
Figura 2. Código para imprimir la dirección IP asignada a la tarjeta.
.
2

Después de conectarnos a la red y estar escuchando Lo primero que se hizo es crea un botón con el cual
en el puerto designado en nuestro caso el numero al ser oprimido se iniciara la conexión con el
54321 se verifica si existe algún cliente que se servidor, y en caso de no poderse conectar mandar un
conecte a nuestro servidor, de ser así se imprime un mensaje de error, este parte de código se muestra en
mensaje en le puerto serie, y después se verifica si el la siguiente figura.
cliente aun sigue estando disponible y se procese a
leer el mensaje que se envía del lado del cliente para
compararlo y proceder a dar respuesta a la petición
que se realiza.

Figura 4. Conexión con el servidor.

Dicha conexión se realiza mediante la dirección IP


que se le fue asignada a la tarjeta y en el mismo
puerto, para este caso:

IP: 192.168.43.246
Puerto: 54321

Después de establecer la conexión cliente-servidor se


implementó un botón llamado “iniciar” el cual es el
encargado de iniciar un hilo “h” que se encarga del
monitoreo de la entrada analógica de nuestra tarjeta,
se implemento un hilo para poder hacer más de una
tarea simultáneamente en este caso estar censando
todo el tiempo la entrada analógica y poder apagar o
encender el LED al mismo tiempo.

Figura 3. Código para dar respuesta a la petición del cliente.

En nuestro caso solo se tienen tres respuestas para


tres peticiones distintas del cliente, leer el valor
analógico de la entrada A0 y poner en alto o en bajo Figura 5. Implementación de un hilo para lectura del ADC del
la salida digital número dos, el código completo se servidor.
encuentra en la sección de Anexos.
Como se observa en la figura 5 se envía el carácter
2. Después de tener listo el servidor, se siguió “A” el cual del lado del servidor se compara y
con la parte del cliente, la cual se desarrollo corresponde con hacer una lectura del pin A0, y el
una pequeña interfaz grafica en el software cliente espera la respuesta y hace el llamado a la
NetBeans para poder visualizar el valor función imprimeDato() la cual se encarga de
analógico leído del lado del servidor y poder imprimir el dato sobre un jTextField para su
presionar un botón para encender o pagar un visualización.
led.
En seguida se realizó el botón que controla en
encendido y pagado del LED, el cual al presionarlo
3

envía al servidor el carácter “O” para encenderlo y También se muestra una captura de la interfaz ya
“F” para apagarlo, a continuación, se muestra dicha funcionando donde se visualiza el valor del ADC y
parte de código. el estado del led con un identificador de color verde
cuando este encendido y en color gris cuando está
apagado.

Figura 6. Código para encender y apagar el LED.

También se agrego un botón para finalizar la


conexión y cerrar la interfaz gráfica.

III. RESULTADOS
Al culminar con los códigos para la parte del
servidor y del cliente se procedió a probar
conjuntamente ambas etapas. A continuación, se
muestra el monitor serie donde observamos como se
conecta a la red “REDMI” y se imprime la dirección
IP asignada. Figura 9. Resultado final, interfaz grafica mostrando valores del ADC
y estado del LED (encendido).

IV. CONCLUSIÓN
La implementación de los sockets y saber manejar
bien esta herramienta para trabajar con redes y poder
tener una comunicación bidireccional siguiendo el
esquema de cliente-servidor es indispensable porque
la mayoría de las aplicaciones web usan sockets, por
Figura 7. Conexión con la red y asignación de IP. ejemplo un chat para que exista esa comunicación
bidireccional entres dos personas, se hace usos de los
Ahora se presenta la interfaz grafica del lado del Sockets, además aprender a utilizarlos es la base para
cliente en donde se observan los botones descritos en poder implementar aplicaciones más interesantes
la sección anterior. basadas en sockets pero que hacen uso de funciones
que dejan por debajo toda aquella creación de los
mismos la cual es la mas importante que se tiene que
manejar y conocer muy bien. Después de culminar
con esta pequeña practica se puede decir que
implementar un socket es muy sencillo, lo que hace
complicada la tarea es la aplicación que se le va a dar,
esto depende de los requerimientos que uno se
proponga. Por ejemplo, la implementación de una
interfaz grafica para monitorear múltiples sensores,
o cualquier otra aplicación, pero en resumen la
creación de un socket y realizar la comunicación
Figura 8. Interfaz gráfica.
4

bidireccional cliente-servidor es relativamente void loop() {


sencilla y muy practica de realizar.

REFERENCIAS WiFiClient client = server.available();


1. Sockets, disponible[online], URL:
http://blueandpurple.com.mx/2016/08/22/sockets/
2. Comunicación mediante sockets, disponible [online], URL: if (client) {
http://sopa.dis.ulpgc.es/progsis/material-didactico-
teorico/tema7_1transporpagina.pdf Serial.println("\n[Client connected]");
while (client.connected()) {
Anexos
while (client.available()>0) {
Código para el cliente implementado en
ESP8266. int lectura = analogRead(A0);
char c = client.read();
#include <ESP8266WiFi.h> if(c=='A'){
client.println(lectura);
int sensor = A0; Serial.println(lectura);
}
//int i=0;
if(c=='O'){
const char* ssid = "Redmi"; digitalWrite(2,HIGH);
const char* password = "pelon1414"; }
if(c=='F'){
WiFiServer server(54321); digitalWrite(2,LOW);
}
void setup() { Serial.println(c);

Serial.begin(9600); client.flush();
pinMode(2,OUTPUT); }
delay(1);
WiFi.begin(ssid, password); }

while (WiFi.status() != client.stop();


WL_CONNECTED) { Serial.println("Client disconnected");
delay(1000);
Serial.println("Connecting.."); }
}

Serial.print("Conectado a REDMI IP:"); }


Serial.println(WiFi.localIP());

server.begin();
}

También podría gustarte