pythonGUI之11: easygui实现tcp客户端调试工具

EasyGUI 是一个简单易用的 Python 图形用户界面(GUI)库,基于 Tkinter 开发,主要目标是简化 GUI 编程,让开发者能够通过简单的函数调用快速创建交互式对话框。
主要特点

  • 简单易用:API 设计简洁直观,适合初学者快速上手。
  • 功能丰富:提供了多种类型的对话框,如消息框、输入框、选择框、文件操作框等。
  • 跨平台:支持 Windows、Mac OS 和 Linux 等操作系统。
  • 快速原型开发:适合快速构建简单的 GUI 应用程序,无需深入了解复杂的窗口布局和事件处理机制。

1.安装包

pip install easygui

2.TCP客户端源码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
TCP Client 网络调试助手(EasyGUI 版)
2025-07-15
"""

import easygui as eg
import socket
import threading
import binascii
import time

BUFFER = 4096

class TcpClientApp:
    def __init__(self):
        self.sock = None
        self.alive = False
        self.recv_data = ""

    def start(self):
        self.connect()
        if self.sock:
            self.run()

    def connect(self):
        host = eg.enterbox("请输入服务器地址 (Host):", "TCP Client", "127.0.0.1")
        port = eg.enterbox("请输入服务器端口 (Port):", "TCP Client", "5002")
        if not host or not port:
            eg.msgbox("地址和端口不能为空!", "错误")
            return
        try:
            port = int(port)
        except ValueError:
            eg.msgbox("端口必须为数字!", "错误")
            return

        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.sock.settimeout(2)
        try:
            self.sock.connect((host, port))
            self.alive = True
            eg.msgbox(f"已连接到 {host}:{port}", "连接成功")
            threading.Thread(target=self.recv_thread, daemon=True).start()
        except Exception as e:
            eg.msgbox(f"连接失败: {e}", "错误")
            self.sock = None

    def send(self):
        if not self.sock:
            eg.msgbox("请先连接服务器!", "提示")
            return
        text = eg.enterbox("请输入要发送的内容:", "发送消息")
        if not text:
            return
        try:
            data = text.encode('utf-8', errors='ignore')
            self.sock.sendall(data)
        except Exception as e:
            eg.msgbox(f"发送失败: {e}", "错误")
            self.close_conn()

    def recv_thread(self):
        while self.alive:
            try:
                data = self.sock.recv(BUFFER)
                if not data:
                    break
                text = data.decode('utf-8', errors='ignore')
                self.recv_data += f"<--{text}\n"
                eg.msgbox(f"收到消息:\n{text}", "接收消息")
            except socket.timeout:
                continue
            except Exception as e:
                if self.alive:
                    eg.msgbox(f"接收异常: {e}", "错误")
                    break
        self.close_conn()

    def close_conn(self):
        self.alive = False
        if self.sock:
            try:
                self.sock.close()
                eg.msgbox("连接已断开", "断开连接")
            except:
                pass
            self.sock = None

    def run(self):
        while True:
            choice = eg.buttonbox("请选择操作:", "TCP Client", choices=["发送消息", "断开连接", "退出"])
            if choice == "发送消息":
                self.send()
            elif choice == "断开连接":
                self.close_conn()
                self.start()
            elif choice == "退出":
                self.close_conn()
                break

if __name__ == '__main__':
    app = TcpClientApp()
    app.start()

3.运行效果
image

image

image

image

image

image

posted @ 2025-07-24 13:22  cupid8505  阅读(10)  评论(0)    收藏  举报