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()

效果图

相关推荐
Mikhail_G7 分钟前
Python应用变量与数据类型
大数据·运维·开发语言·python·数据分析
Johny_Zhao11 分钟前
2025年6月Docker镜像加速失效终极解决方案
linux·网络·网络安全·docker·信息安全·kubernetes·云计算·containerd·yum源·系统运维
PypYCCcccCc17 分钟前
支付系统架构图
java·网络·金融·系统架构
hello kitty w37 分钟前
Python学习(7) ----- Python起源
linux·python·学习
站大爷IP1 小时前
Python文本序列的类型
python
千千寰宇1 小时前
[Java/Python] Java 基于命令行调用 Python
python·java se-jdk/jvm
yvestine2 小时前
自然语言处理——文本表示
人工智能·python·算法·自然语言处理·文本表示
搬码临时工2 小时前
如何把本地服务器变成公网服务器?内网ip网址转换到外网连接访问
运维·服务器·网络·tcp/ip·智能路由器·远程工作·访问公司内网
zzc9212 小时前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
编程有点难2 小时前
Python训练打卡Day43
开发语言·python·深度学习