import socket import threading import time class TcpServer(object): def __init__(self): # 配置信息 self.tcpPort = 12345 # 服务端TCP监听端口 self.udpPort = 54321 # 设备发现UDP端口 self.broadcastAddr = '' # 广播地址 # TCP服务端主逻辑 def tcpServer(self): server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('0.0.0.0', self.tcpPort)) server.listen(5) print(f"[*] TCP服务端已启动,监听端口 {self.tcpPort}") while True: clientSock, addr = server.accept() print(f"[+] 接收到来自 {addr} 的连接") # 创建线程处理客户端请求 client_thread = threading.Thread(target=self.handleClient, args=(clientSock,)) client_thread.start() # 处理客户端请求 def handleClient(self, clientSock): try: while True: data = clientSock.recv(1024) if not data: break print(f"收到消息: {data.decode('utf-8')}") clientSock.send(b"ACK") # 返回确认 except Exception as e: print(f"客户端异常断开: {e}") finally: clientSock.close() # UDP设备发现服务 def udpDiscoveryServer(self): udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udpSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) udpSock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) udpSock.bind(('', self.udpPort)) print(f"[*] UDP发现服务已启动,监听端口 {self.udpPort}") while True: data, addr = udpSock.recvfrom(1024) if data.decode('utf-8') == "DISCOVERY_REQUEST": print(f"[+] 收到来自 {addr} 的发现请求") response = f"DISCOVERY_RESPONSE:{socket.gethostname()}:{self.tcpPort}" udpSock.sendto(response.encode('utf-8'), addr) if __name__ == '__main__': server = TcpServer() # 启动TCP服务端和UDP发现服务 threading.Thread(target=server.tcpServer, daemon=True).start() threading.Thread(target=server.udpDiscoveryServer, daemon=True).start() # 防止主线程退出 while True: time.sleep(1)