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

效果图

相关推荐
Johny_Zhao7 小时前
基于 Docker 的 LLaMA-Factory 全流程部署指南
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·yum源·系统运维·llama-factory
喂完待续8 小时前
【Tech Arch】Spark为何成为大数据引擎之王
大数据·hadoop·python·数据分析·spark·apache·mapreduce
王者鳜錸9 小时前
PYTHON让繁琐的工作自动化-猜数字游戏
python·游戏·自动化
岚天start9 小时前
Linux系统网络排查工具总结
linux·运维·网络·监控·扫描·连通性·流量
若天明10 小时前
深度学习-计算机视觉-微调 Fine-tune
人工智能·python·深度学习·机器学习·计算机视觉·ai·cnn
王燕龙(大卫)10 小时前
tcp会无限次重传吗
网络·tcp/ip
倔强青铜三10 小时前
苦练Python第39天:海象操作符 := 的入门、实战与避坑指南
人工智能·python·面试
weisian15111 小时前
HTTP协议-3-HTTP/2是如何维持长连接的?
网络·网络协议·http
一百天成为python专家11 小时前
Python循环语句 从入门到精通
开发语言·人工智能·python·opencv·支持向量机·计算机视觉
Sunhen_Qiletian11 小时前
朝花夕拾(五)--------Python 中函数、库及接口的详解
开发语言·python