transformadores-backend/clase_cliente.py

72 lines
2.4 KiB
Python
Raw Permalink Normal View History

2024-11-23 16:52:21 +00:00
import socket, json
from lector import *
# Clase Cliente para la conexión y generación de ondas
class Cliente:
def __init__(self, host, port):
self.host = host
self.port = port
self.socket = None
def conectar(self):
"""Conecta al servidor de forma persistente"""
try:
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.connect((self.host, self.port))
print("Conectado al servidor")
except ConnectionError as e:
print(f"Error al conectar con el servidor: {e}")
def escuchar_y_responder(self):
"""Escucha solicitudes del servidor y responde con datos generados"""
try:
while True:
# Escucha de forma continua para recibir la solicitud de medición del servidor
print("Esperando solicitud de medición del servidor...")
data = self.socket.recv(1024)
if data:
print("Solicitud recibida del servidor:", data.decode('utf-8'))
request_vars = json.loads(data.decode('utf-8'))
if request_vars == 'Apagate':
break
self.mandar_datos(request_vars)
except Exception as e:
print(f"Error en la conexión con el servidor: {e}")
finally:
self.socket.close()
print("Conexión cerrada con el servidor")
def mandar_datos(self, request_vars):
"""Genera los datos de las ondas según las variables recibidas y los envía al servidor"""
fs = request_vars.get('Velocidad Muestreo', 1e3) # Frecuencia de muestreo en Hz, valor estandar 1e3
size = request_vars.get('Numero Muestras', 50) # Número de muestras, valor estandar 50
paquete = generar_paquete_ejemplo(fs, size)
# Envía los datos de vuelta al servidor
self.mandar_paquete(paquete)
def mandar_paquete(self, data):
"""Envía el JSON generado al servidor en la misma conexión"""
try:
json_data = json.dumps(data) + "\n" # Añadimos el delimitador al final del mensaje
self.socket.sendall(json_data.encode('utf-8'))
print("Datos enviados al servidor")
except Exception as e:
print(f"Error al enviar datos al servidor: {e}")