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

server/2024/11/28 21:52:45/

前言

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/server/145729.html

相关文章

Linux 命令总结

01. ls 指令 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -i 输出文件的 i 节点的索引信息。 如 ls –…

不需要双手离开键盘 vscode

目标是“不需要双手离开键盘”! ctrl shift O 打开函数导航窗格 ctrl enter 行中换行 alt ↑/↓上下移行 shift alt ↑/↓上下复制 ctrl ←/→ 按代码块移动 ctrl delete / backspace按代码块删除 ctrl l 选择单行 shift delete 删除整行 ctrl C/V 复制/…

On-Chip-Network之routing

在确定网络拓扑之后,路由算法用来决定消息将通过网络的哪条路径到达目的地。 路由算法的目标是将流量均匀地分布在由网络拓扑提供的路径上,以avoid hotspots and minimize contention,从而减少网络延迟和提高吞吐量。所有这些性能目标必须在严…

使用OpenSSL创建CA,并基于CA创建证书

生成CA证书 生成CA证书的私钥 openssl genrsa -out ca.key 4096生成CA证书 openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/CCN/STBeijing/LBeijing/Oexample/OUPersonal/CNMyPersonal Root CA" \-key ca.key \-out ca.crt生成Server证书 证书通常包…

【MySQL】开发技术深度探索:mysql数据库复合查询全面详解

前言:本节内容为mysql的符合查询。 本节内容是基本查询的进阶, 是对内置函数, 基本查询的集合使用。 友友们多多利用文章中的案例练习进行掌握。 ps:本节内容还是使用员工表进行演示, 没有员工表的友友可以去网络上找…

GitLab|应用部署

创建docker-compose.yaml文件 输入docker-compose配置 version: 3.8 services:gitlab:image: gitlab/gitlab-ce:15.11.2-ce.0restart: alwayscontainer_name: gitlab-ceprivileged: truehostname: 192.168.44.235environment:TZ: Asia/ShanghaiGITLAB_OMNIBUS_CONFIG: |exter…

高级java每日一道面试题-2024年11月27日-JVM篇-JVM的永久代中会发生垃圾回收么?

如果有遗漏,评论区告诉我进行补充 面试官: JVM的永久代中会发生垃圾回收么? 我回答: 在Java虚拟机(JVM)的历史版本中,确实存在一个称为“永久代”(Permanent Generation, 或者简称PermGen)的内存区域。永久代主要用…

ABAP OOALV模板

自用模板,可能存在问题 一、主程序 *&---------------------------------------------------------------------* *& Report ZVIA_OO_ALV *&---------------------------------------------------------------------* REPORT ZVIA_OO_ALV.INCLUDE ZVI…