优化代码

This commit is contained in:
zhangsheng 2025-03-08 14:48:51 +08:00
parent c59b6a3c1b
commit 9ae3e480ca

View File

@ -169,6 +169,7 @@ class SocketClientApp(QMainWindow):
try:
port = int(port)
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(2)
# 设置 keep-alive 选项
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
self.socket.connect((ip, port))
@ -188,14 +189,17 @@ class SocketClientApp(QMainWindow):
start_time = time.time()
try:
while True:
try:
# 每次接收 1024 字节的数据
chunk = self.socket.recv(1000)
chunk = self.socket.recv(1460)
buffer_size += len(chunk)
print(f"len partf {len(chunk)},buffer_size {buffer_size}")
# 拼接数据
if buffer_size > 97000*4:
if not chunk:
break # 如果没有数据,退出循环
received_data += chunk
except socket.timeout:
print(f"接收数据超时({2} 秒),退出接收循环")
break # 超时后退出接收循环
# 记录结束时间
end_time = time.time()
@ -231,26 +235,35 @@ class SocketClientApp(QMainWindow):
# 提取实际数据
actual_data = received_data[7:7 + data_length]
print(f"解析到的长度字段 {len(actual_data)}")
complete_data += actual_data # 将数据拼接到完整数据中
print(f"解析到的长度字段2 {len(complete_data)}")
# 丢弃已处理的数据
received_data = received_data[7 + data_length:]
print(f"还剩下解析长度字段 {len(received_data)}")
except Exception as e:
print(f"发生错误: {e}")
print(f" 数据: {len(complete_data)}")
# 打印前100个字节的数据以16进制方式
print("前100个字节的数据16进制表示")
for i in range(min(100, len(complete_data))): # 确保不超过数据长度
print(f"{complete_data[i]:02X}", end=" ") # 每个字节以16进制格式打印
print() # 换行
return complete_data
def on_button_clicked(self):
""" 获取数据并绘制 """
try:
self.status_bar.showMessage("状态: 正在获取数据...")
self.socket.sendall(bytes([0xAA, 0x55, 0xAA,0x01])) # 发送数据
data = self.receive_data() # 接收所有数据
data = np.frombuffer(data, dtype=np.int32) # 根据实际数据格式转换
for i in range(min(100, len(data))): # 确保不超过数据长度
print(f"{data[i]:1f}", end=" ")
print() # 换行
LSB_32BIT = (2.8 / (2 ** 31)) * ((750 + 287) / 287) * 1000
scaled_data = data * LSB_32BIT
for i in range(min(100, len(scaled_data))): # 确保不超过数据长度
print(f"{scaled_data[i]:2f}", end=" ")
print() # 换行
self.canvas.plot_data(scaled_data) # 在 Qt 界面中绘图
self.status_bar.showMessage("状态: 数据绘制完成")
except Exception as e: