import tkinter as tk
from tkinter import messagebox, filedialog
from tkinter import ttk
import socket
import threading
import subprocess
import time
from datetime import datetime
from PIL import Image, ImageTk
# 全局变量
client_socket = None
connected = False
def connect_to_server():
global client_socket, connected
ip = "127.0.0.1"
port = 7930
try:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((ip, port))
connected = True
status_indicator.config(bg='green')
messagebox.showinfo("Success", f"Connected to server at {ip}:{port}")
# Start a new thread to receive data
threading.Thread(target=receive_data).start()
except Exception as e:
connected = False
status_indicator.config(bg='red')
messagebox.showerror("Error", f"Failed to connect to server: {e}")
def disconnect_from_server():
global client_socket, connected
if connected:
client_socket.close()
connected = False
status_indicator.config(bg='red')
messagebox.showinfo("Disconnected", "Disconnected from server")
def receive_data():
while connected:
try:
data = client_socket.recv(1024).decode('utf-8')
if not data:
break
current_time = datetime.now().strftime("%H:%M:%S")
received_data_text.insert(tk.END, f"[{current_time}] {data}\n")
received_data_text.yview_moveto(1) # Scroll to the bottom
except Exception as e:
print(f"Error receiving data: {e}")
break
disconnect_from_server()
def launch_application():
app_path = r"D:\aa\Public_Release\aa.exe"
try:
subprocess.Popen(app_path)
except Exception as e:
messagebox.showerror("Error", f"Failed to launch application: {e}")
# 创建主窗口
root = tk.Tk()
root.title("TCP Client")
root.geometry("800x600")
# 连接状态指示器(右上角)
status_indicator = tk.Frame(root, width=100, height=100, bg='red')
status_indicator.place(x=700, y=0)
# 左侧区域 - 启动应用程序按钮
left_frame = tk.Frame(root, width=800, height=300)
left_frame.pack(side=tk.TOP, fill=tk.X)
# 加载并设置图像
image_path = r"C:\Users\Administrator\Desktop\Study\i.png" # 替换为实际图像路径
try:
image = Image.open(image_path)
image = image.resize((150, 150), Image.Resampling.LANCZOS)
img = ImageTk.PhotoImage(image)
except IOError:
img = None
launch_button = tk.Button(left_frame, image=img, command=launch_application)
if img:
launch_button.image = img # Keep a reference!
launch_button.pack(pady=125)
# 右侧区域 - 显示接收到的数据
right_frame = tk.Frame(root, width=800, height=300)
right_frame.pack(side=tk.TOP, fill=tk.X)
received_data_label = tk.Label(right_frame, text="Received Data:")
received_data_label.pack(pady=10)
received_data_text = tk.Text(right_frame, wrap=tk.WORD, height=15, width=60)
received_data_text.pack(padx=10, pady=10)
# 控制按钮
control_frame = tk.Frame(root)
control_frame.pack(pady=10)
connect_button = tk.Button(control_frame, text="Connect", command=connect_to_server)
connect_button.grid(row=0, column=0, padx=5)
disconnect_button = tk.Button(control_frame, text="Disconnect", command=disconnect_from_server)
disconnect_button.grid(row=0, column=1, padx=5)
# 初始化全局变量
client_socket = None
connected = False
# 运行主循环
root.mainloop()