102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
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 |