from collections import deque import threading import logging from utiles import * logging.basicConfig(level=logging.DEBUG) class ServiceConnection: def __init__(self, conn_id: str, provider_sock: socket.socket, forward_sock: socket.socket, connector_addr: tuple): self.conn_id = conn_id self.provider_sock = provider_sock self.forward_sock = forward_sock self.connector_addr = connector_addr self.running = False def forward_thread(self): while self.running: try: data = self.provider_sock.recv(1024) pack = Package('data', {'conn_id': self.conn_id}, data) self.forward_sock.sendto(pack.pack(), self.connector_addr) except Exception as e: logging.error(f"收到提供端数据,转发失败: {e}") break self.running = False if self.provider_sock: self.provider_sock.close() self.provider_sock = None return def backward_data(self, data): try: self.provider_sock.sendall(data) except Exception as e: logging.error(f"收到客户端数据,转发失败: {e}") return def run(self): self.running = True threading.Thread(target=self.forward_thread, daemon=True).start() class ServiceProvider: def __init__(self, service_name: str, host: str, port: int, sock: socket.socket): self.service_name = service_name self.host = host self.port = port self.sock = sock