当前位置: 首页 > news >正文

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

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


多任务版本的TCP服务器

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

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.lryc.cn/news/509949.html

相关文章:

  • 分布式调度框架学习笔记
  • SpringCloudAlibaba技术栈-Nacos
  • Redis篇--常见问题篇4--大Key(Big Key,什么是大Key,影响及使用建议)
  • 谷歌浏览器 Chrome 提示:此扩展程序可能很快将不再受支持
  • WebRTC服务质量(10)- Pacer机制(02) RoundRobinPacketQueue
  • 数据库的数据被清除了,该如何恢复?
  • 【西安电子科技大学考研】25官方复试专业课参考书目汇总
  • 【理解机器学习中的过拟合与欠拟合】
  • fastjson诡异报错
  • 面经zhenyq
  • GoFrame框架介绍
  • MapReduce工作流程+Shuffle机制
  • JAVA8 Stream API 使用详解
  • Redis 集群架构:高可用与扩展性
  • Redis数据对象
  • Docker部署GitLab服务器
  • python版本的Selenium的下载及chrome环境搭建和简单使用
  • 重温设计模式--4、组合模式
  • 5、mysql的读写分离
  • uniapp Native.js原生arr插件服务发送广播到uniapp页面中
  • 如何在 Ubuntu 22.04 上安装 Elasticsearch
  • 单片机长耗时前后台任务优化
  • Linux大数据方向shell
  • 爬虫 APP 逆向 ---> shopee(虾皮) 电商
  • axios 常见的content-type、responseType有哪些?
  • 从零开始C++游戏开发之第七篇:游戏状态机与回合管理
  • 【全开源】Java多语言tiktok跨境商城TikTok内嵌商城送搭建教程
  • mac启ssh服务用于快速文件传输
  • 《探索 Apache Spark MLlib 与 Java 结合的卓越之道》
  • 使用 Python 创建多栏 Word 文档 – 详解