From 9ae3e480ca8870ec55d009bfa9709ed5c5d82a1f Mon Sep 17 00:00:00 2001 From: zhangsheng Date: Sat, 8 Mar 2025 14:48:51 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mainwindow.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/mainwindow.py b/mainwindow.py index 52b2f80..6fb1b88 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -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: - # 每次接收 1024 字节的数据 - chunk = self.socket.recv(1000) - buffer_size += len(chunk) - print(f"len partf {len(chunk)},buffer_size {buffer_size}") - # 拼接数据 - if buffer_size > 97000*4: - break # 如果没有数据,退出循环 - received_data += chunk + try: + # 每次接收 1024 字节的数据 + chunk = self.socket.recv(1460) + buffer_size += len(chunk) + print(f"len partf {len(chunk)},buffer_size {buffer_size}") + 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: