import socket import json import threading import time class TCPClient: def __init__(self, host='127.0.0.1', port=8889): self.host = host self.port = port self.client_socket = None self.is_connected = False self.reconnect_interval = 5 # 重连间隔(秒) self.is_running = False def connect(self): """连接到TCP服务端""" try: self.client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.client_socket.connect((self.host, self.port)) self.is_connected = True print(f"已连接到 {self.host}:{self.port}") return True except Exception as e: print(f"连接到服务端失败: {e}") self.is_connected = False return False def start(self): """启动客户端并维持连接""" self.is_running = True reconnect_thread = threading.Thread(target=self._reconnect_worker, daemon=True) reconnect_thread.start() def _reconnect_worker(self): """重连工作线程""" while self.is_running: if not self.is_connected: print(f"尝试重新连接到 {self.host}:{self.port}...") self.connect() time.sleep(self.reconnect_interval) def send_data(self, data): """发送数据到服务端""" if not self.is_connected or not self.client_socket: print("客户端未连接到服务端") return False try: json_data = json.dumps(data, ensure_ascii=False) # 添加换行符作为结束标记 self.client_socket.sendall((json_data + "\n").encode('utf-8')) print(f"已发送数据: {json_data}") return True except Exception as e: print(f"发送数据时出错: {e}") self.is_connected = False return False def stop(self): """停止客户端""" self.is_running = False self.is_connected = False if self.client_socket: try: self.client_socket.close() except Exception as e: print(f"关闭客户端套接字时出错: {e}") print("TCP客户端已停止")