python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接

前言

python实现TCP服务端,支持对所有客户端的数据收发,支持终端自定义命令操作,提供clear命令一键断开所有的客户端连接

简单易懂,直接上码

源码

python 复制代码
import socket
import threading

class TCPServer:
    # 修改此处ip 端口
    def __init__(self, host='0.0.0.0', port=12345):
        self.host = host
        self.port = port
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.clients = []  # 存储所有连接的客户端
        self.running = True  # 标记服务器是否正在运行

    def start(self):
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen(5)
        print(f"服务器启动于 {self.host}:{self.port}")

        # 启动一个线程来监听控制台命令
        threading.Thread(target=self.console_listener, daemon=True).start()

        try:
            while self.running:
                client_socket, addr = self.server_socket.accept()
                print(f"接受来自 {addr} 的连接")
                self.clients.append(client_socket)
                threading.Thread(target=self.handle_client, args=(client_socket,), daemon=True).start()
        except KeyboardInterrupt:
            self.stop()

    def stop(self):
        print("停止服务器...")
        self.running = False
        self.server_socket.close()
        for client in self.clients:
            client.close()
        print("服务器已停止。")

    def handle_client(self, client_socket):
        try:
            while True:
                data = client_socket.recv(1024)
                if not data:
                    break
                print(f"收到数据: {data.decode()}")
                client_socket.sendall(data)  # 将接收到的数据回传给客户端
        except Exception as e:
            print(f"处理客户端时发生错误: {e}")
        finally:
            client_socket.close()
            if client_socket in self.clients:
                self.clients.remove(client_socket)
            print(f"客户端已断开连接。")

    def console_listener(self):
        while self.running:
            cmd = input("输入命令(输入 'clear' 断开所有客户端连接): ")
            if cmd.strip().lower() == 'clear':
                print("断开所有客户端连接...")
                for client in list(self.clients):
                    client.close()
                    if client in self.clients:
                        self.clients.remove(client)
                print("所有客户端已断开连接。")
            else:
                print("将消息发送给所有客户端...")
                for client in self.clients:
                    try:
                        client.sendall(cmd.encode())
                    except Exception as e:
                        print(f"发送消息时发生错误: {e}")
                        if client in self.clients:
                            self.clients.remove(client)
                print("消息已发送。")

if __name__ == "__main__":
    server = TCPServer()
    server.start()

效果图

相关推荐
懂点Tech8 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
comedate8 小时前
SMLib 的 Examples 导读:PyAPI / SM_API / SMLib 三组示例怎么读
python·cad·smlib·examples·sm_api
云和数据.ChenGuang8 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
川石课堂软件测试9 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
万化冥合9 小时前
PyBox屏幕键盘如何辅助演示键盘操作?
python·计算机外设
车软学堂9 小时前
从测试转开发,到底要补什么
网络·人工智能·python·功能测试·单片机·车载系统·自动化
天空依然蔚蓝9 小时前
分享一个自动检测网站在线状态的python程序
python·运维开发·1024程序员节
岁月宁静10 小时前
一个 AI 项目从本地到上线,要经过哪些步骤?全流程讲清楚
python·docker·agent
zl_dfq10 小时前
Windows 下 TCP 套接字编程指南::从 Winsock 初始化到回显服务器
tcp/ip
codists11 小时前
《crafting interpreters》阅读笔记:p45-p45
python