transformadores-backend/clase_server.py

102 lines
3.4 KiB
Python
Raw Normal View History

2024-11-23 16:52:21 +00:00
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