Untitled
unknown
plain_text
a year ago
4.1 kB
6
Indexable
import socket import threading import tkinter as tk class TCPDataCollector: def __init__(self, server_ip, server_port, identifier): self.server_ip = server_ip self.server_port = server_port self.identifier = identifier self.data_collector = None self.collecting = False self.receive_thread = None self.received_data = [] # List to store received data self.first_data_value = "" self.lock = threading.Lock() # Lock for thread safety # Setup GUI self.root = tk.Tk() self.root.title("TCP Data Collector") # Set the font to larger and bold self.font = ("Helvetica", 200, "bold") self.label = tk.Label(self.root, text="", font=self.font) self.label.pack(pady=20) self.update_gui() def start_collecting(self): self.collecting = True self.data_collector = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: self.data_collector.connect((self.server_ip, self.server_port)) self.receive_thread = threading.Thread(target=self.receive_data) self.receive_thread.start() self.root.mainloop() # Start the GUI event loop except Exception as e: print(f"Error connecting to {self.server_ip}:{self.server_port}: {e}") self.collecting = False def stop_collecting(self): self.collecting = False if self.data_collector: self.data_collector.close() if self.receive_thread: self.receive_thread.join() def receive_data(self): while self.collecting: try: received_data = self.data_collector.recv(1024) if received_data: decoded_data = received_data.decode('utf-8').strip() # Check if the line starts with '$F' if decoded_data.startswith('$F'): with self.lock: self.received_data.append(decoded_data) # Split the line by commas and process the first data value parts = decoded_data.split(',') if len(parts) > 1: self.first_data_value = parts[1].strip() self.log_data_to_file(decoded_data) # Further process if identifier matches if len(parts) >= 2 and parts[1] == str(self.identifier): data_value = parts[4].strip('"') self.print_filtered_data(data_value) except Exception as e: print(f"Error receiving data: {e}") self.stop_collecting() break def update_gui(self): with self.lock: # Only set the number value in the label self.label.config(text=self.first_data_value) self.root.after(1000, self.update_gui) # Refresh every 1000 ms (1 second) def print_filtered_data(self, value): print(f"Filtered Data: {value}") def log_data_to_file(self, data): log_file_path = "received_data_log.txt" # Update this to your desired path with open(log_file_path, "a") as file: file.write(data + "\n") if __name__ == '__main__': server_ip = '192.168.1.140' # Replace with the IP address of your server server_port = 50000 # Replace with the port your server is listening on identifier = 96 # Replace with the identifier you are interested in collector = TCPDataCollector(server_ip, server_port, identifier) collector.start_collecting() try: while True: pass except KeyboardInterrupt: collector.stop_collecting() print("\nData collection stopped.")
Editor is loading...
Leave a Comment