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

ops/2024/11/28 6:38:08/

前言

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

简单易懂,直接上码

源码

python">import socket
import threadingclass TCPServer:# 修改此处ip 端口def __init__(self, host='0.0.0.0', port=12345):self.host = hostself.port = portself.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 = Falseself.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:breakprint(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()

效果图

在这里插入图片描述


http://www.ppmy.cn/ops/137282.html

相关文章

Go-protobuf consul注册备忘录

demo/demo_proto是server 想要运行就可以 前提是port要改对 windows必须是现在的ip地址8888端口才可以成功注册到consul consul的地址是localhost:8500 go run .//在demo_proto里面client在\demo\demo_proto\cmd\client里面 也是用go run .来运行

带有悬浮窗功能的Android应用

android api29 gradle 8.9 要求 布局文件 (floating_window_layout.xml): 增加、删除、关闭按钮默认隐藏。使用“开始”按钮来控制这些按钮的显示和隐藏。 服务类 (FloatingWindowService.kt): 实现“开始”按钮的功能,点击时切换增加、删除、关闭按钮的可见性。处…

新手学操作系统(第十一周)

1.与用户/组相关的一些命令 uptime <- 登录用户数&#xff0c;运行时间&#xff0c;平均负荷 who <-登录用户 whoami <-当前用户 id <-当前用户的信息 id 用户名 <- 用户名对应的用户信息 groups <-当前用户所属的组 groups 用户名 <- 用…

探寻嵌入式系统的发展之路与趋势展望

目录 一、嵌入式系统的发展历程 1.1. 早期阶段&#xff08;20世纪40年代至70年代初&#xff09; 1.1.1. 起源与背景 1.1.2. 特点 1.1.3. 应用领域 1.1.4. 发展里程碑 1.2. 单片机时代&#xff08;20世纪70年代初至80年代末&#xff09; 1.2.1. 硬件 1.2.2. 软件 1.2.…

Day47 | 动态规划 :线性DP 最长公共子序列最长公共子数组

Day47 | 动态规划 &#xff1a;线性DP 最长公共子序列&&最长公共子数组 动态规划应该如何学习&#xff1f;-CSDN博客 本次题解参考自灵神的做法&#xff0c;大家也多多支持灵神的题解 最长公共子序列 编辑距离_哔哩哔哩_bilibili 动态规划学习&#xff1a; 1.思考…

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…

第三十三章 UDP 客户端 服务器通信 - IPv4 和 IPv6

文章目录 第三十三章 UDP 客户端 服务器通信 - IPv4 和 IPv6 第三十三章 UDP 客户端 服务器通信 - IPv4 和 IPv6 UDP 支持 IPv4 和 IPv6 互联网协议。由于这些协议不兼容&#xff0c;服务器和客户端都必须使用相同的Internet协议&#xff0c;否则传输将失败。 IPv4 地址具有以…

NExT-GPT: Any-to-Any Multimodal LLM

NExT-GPT: Any-to-Any Multimodal LLM ICML 2024 Oral 整体框架 Motivation 大多数多模态模型只关注输入端的多模态理解部分模型有训练输出图片和文本交互的LLM现有的any-to-any LLM存在一定的问题&#xff1a; 不同模块之间的信息传递完全基于LLM产生的离散文本&#xff0c;级…