将程序修改为在搅拌楼端运行
This commit is contained in:
70
tcp/client.py
Normal file
70
tcp/client.py
Normal file
@ -0,0 +1,70 @@
|
||||
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客户端已停止")
|
||||
|
||||
Reference in New Issue
Block a user