import socket, json # Configuración del servidor HOST = '127.0.0.1' PORT = 65432 class Server: def __init__(self): self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.bind((HOST, PORT)) self.server_socket.listen(1) print("Esperando conexión del cliente...") self.conn, addr = self.server_socket.accept() print(f"Cliente conectado desde {addr}") def apagar_cliente(self): # Funcion que manda orden de apagar cliente, util para desarrollo y debug vars_request = "Apagate" flag = True while flag: try: json_data = json.dumps(vars_request) + "\n" # Añadimos el delimitador al final self.conn.sendall(json_data.encode('utf-8')) print("Orden de Apagado Enviada") flag = False except Exception as e: print(f"Error al enviar orden de apagado:", {e}) break # Función para enviar solicitudes de medición al cliente de forma continua def pedir_datos(self, fs, size=50): #necesita la frecuencia de medida si o si, size tiene un valor base que se puede cambiar """Envia solicitudes de inicio al cliente cada f_request segundos""" flag = True while flag: vars_request = { "Velocidad Muestreo": fs, "Numero Muestras": size } try: json_data = json.dumps(vars_request) + "\n" # Añadimos el delimitador al final self.conn.sendall(json_data.encode('utf-8')) datos = self.escuchar_datos() flag = False return datos except Exception as e: print(f"Error al enviar solicitud de medición al cliente: {e}") break # Funcion que espera para escuchar datos def escuchar_datos(self): buffer_size = 4096 # Tamaño del búfer de recepción data_buffer = "" # Almacena datos recibidos incompletos flag = True while flag: # solo acaba el bucle cuando un paquete ha sido recibido try: # Recibe el siguiente fragmento de datos packet = self.conn.recv(buffer_size).decode('utf-8') if not packet: break # Desconexión del cliente # Añade el fragmento al buffer de datos data_buffer += packet # Procesa cada mensaje JSON completo en el buffer while "\n" in data_buffer: # Verifica si hay un delimitador en el buffer json_message, data_buffer = data_buffer.split("\n", 1) # Separa el mensaje completo try: # Decodifica el mensaje JSON completo received_data = json.loads(json_message) flag = False return received_data except json.JSONDecodeError as e: print(f"Error al decodificar datos JSON: {e}") except (ConnectionResetError, ConnectionAbortedError) as e: print("La conexión con el cliente se cerró abruptamente:", e) break except Exception as e: print(f"Error inesperado al recibir datos del cliente: {e}") break