【Python高级353】python实现多线程版本的TCP服务器

ops/2024/12/28 3:30:06/

前面学了了套接字编程、tcp服务端客户端开发、面向对象版的服务端客户端、带有端口复用的服务端。
这里使用多线程开发多任务版的服务端


多任务版本的TCP服务器

来一个客户,就为其创建一个线程

python">import socket
import threadingclass WebServer:# 3、定义一个__init__方法,初始化套接字对象def __init__(self):self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置端口复用(在上一次关闭服务器后,端口不会立即释放,需要设置端口复用)self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)  # 参数2:SOL_SOCKET表示当前套接字,参数3:SO_REUSEADDR表示端口复用,参数4:True表示开启端口复用(默认是false,要等待很长时间端口才会自动释放)self.tcp_server_socket.bind(("127.0.0.1", 8000))  # 如果是本机,可以不写ip地址self.tcp_server_socket.listen(128)  # 128表示最大连接数# 4、定义一个start方法,启动服务器,接收客户端连接def start(self):while True:# 等待接受客户端的连接请求new_socket, ip_port = self.tcp_server_socket.accept()# 当接收到客户端连接请求后创建一个线程(线程内调用自身的handle_request()方法,用于接收和发送消息(封装性))sub_thread = threading.Thread(target=self.handle_request, args=(new_socket, ip_port))sub_thread.start()# 5、定义一个handle_request方法,用于接收和发送消息def handle_request(self, new_socket, ip_port):# 接收某个客户端发送过来的消息recv_data = new_socket.recv(1024).decode("utf-8")  # 实际工作中一条数据大小在1~1.5k之间print(f"接收到的数据为:{recv_data}")# 发送消息给客户端new_socket.send("信息已收到".encode("utf-8"))# 关闭套接字new_socket.close()# 定义一个程序的执行入口
if __name__ == "__main__":# 1、实例化服务器对象server = WebServer()# 2、启动服务器server.start()

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

相关文章

Jenkins基础教程

Jenkins介绍 Jenkins 是一款开源的持续集成(CI)和持续交付(CD)工具,在软件开发和自动化部署流程中发挥着关键作用。 1.背景和起源 它最初是由 Sun Microsystems 公司的一名工程师开发的 Hudson 项目,后来…

电商数据的安全与隐私保护:API接口的角色

在电子商务领域,数据安全与隐私保护是企业运营和消费者信任的核心。随着电商平台的日益复杂化和互联网技术的快速发展,API(应用程序接口)作为系统间通信的桥梁,在数据安全与隐私保护中扮演着至关重要的角色。本文将从A…

IP属地和所在地不一致什么意思?怎么换成另外一个地方的

在数字化时代,IP地址作为网络设备的唯一标识符,不仅关乎设备间的通信,还涉及到用户的网络身份与位置信息。然而,有时我们会发现,社交媒体或网络平台上显示的IP属地与用户的实际所在地并不一致。这种不一致现象引发了诸…

乐乐音乐Flutter版

简介 乐乐音乐Flutter版主要是基于Flutter Desktop框架开发的音乐播放器,它支持lrc歌词和动感歌词(ksc歌词、krc歌词、trc歌词、zrce歌词和hrc歌词等)、多种格式歌词转换器及制作动感歌词、翻译歌词和音译歌词。 编译环境 Flutter:ideaIU-2024.1.4 参考地址 多…

深入浅出:多功能 Copilot 智能助手如何借助 LLM 实现精准意图识别

阅读原文 1. Copilot中的意图识别 如果要搭建一个 Copilot 智能助手,比如支持 知识问答、数据分析、智能托管、AIGC 等众多场景或能力,那么最核心的就是基于LLM进行意图识别分发能力,意图识别的准确率直接决定了 Copilot 智能助手的能力上限…

prim-acwing

题目:Prim算法求最小生成树 858. Prim算法求最小生成树 - AcWing题库 代码:(邻接矩阵dt数组存最短路写法) 感觉跟最短路径是一样的,只是多了个最小生成树概念 dt 存的其实是, 编号 权值, 例…

“电找车“ | 助力移动充电机器人快速落地

近些年,随着新能源汽车保有量的提升,给车充电经常成为困扰车主的一大问题。 据中国电动汽车充电基础设施促进联盟发布的数据显示,2024年上半年,充电基础设施增量为164.7万台,同比上升14.2%;桩车增量比为1:3…

使用 Docker 在 Ubuntu 下部署 Cloudflared Tunnel 服务器

在现代互联网中,安全和隐私是至关重要的。Cloudflared Tunnel 是 Cloudflare 提供的一种安全隧道解决方案,可以帮助你安全地将本地服务暴露到互联网,而无需暴露你的服务器 IP 地址。通过 Docker 部署 Cloudflared Tunnel,不仅简化…