聊天室系统:多任务版TCP服务端程序开发详细代码解释

1. 需求

目前我们开发的TCP服务端程序只能服务于一个客户端,如何开发一个多任务版的TCP服务端程序能够服务于多个客户端呢?

完成多任务,可以使用线程,比进程更加节省内存资源。

2. 具体实现步骤

  1. 编写一个TCP服务端程序,循环等待接受客户端的连接请求
  2. 当客户端和服务端建立连接成功,创建子线程,使用子线程专门处理客户端的请求,防止主线程阻塞
  3. 把创建的子线程设置成为守护主线程,防止主线程无法退出。

3. 实现代码:

# 导入socket模块,用于实现网络通信功能
import socket
# 导入threading模块,用于创建和管理线程
import threading# 定义处理客户端请求的函数
def handle_client_request(service_client_socket, ip_port):# 无限循环,持续接收客户端消息while True:# 接收来自客户端的数据,最大接收1024字节recv_data = service_client_socket.recv(1024)# 如果接收到的数据不为空if recv_data:# 打印客户端发送的消息,格式为“客户端IP:端口说:消息内容”print("客户端%s:%s说:%s" % (ip_port[0], ip_port[1], recv_data.decode()))# 向客户端发送响应消息“ok,问题正在处理中...”,并将其编码为utf-8格式service_client_socket.send("ok,问题正在处理中...".encode('utf-8'))else:# 如果没有接收到数据,说明客户端已断开连接print("客户端%s:%s已经退出聊天室" % (ip_port[0], ip_port[1]))# 跳出循环break# 关闭与客户端的连接service_client_socket.close()# 如果此脚本作为主程序运行
if __name__ == '__main__':# 创建一个TCP/IP套接字对象server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定服务器地址和端口,此处使用的是本地地址和8080端口server_socket.bind(("", 8080))# 设置监听队列长度为128server_socket.listen(128)# 无限循环,等待客户端连接while True:# 接受客户端连接,返回一个新的套接字对象和客户端地址信息service_client_socket, ip_port = server_socket.accept()# 打印客户端连接信息,格式为“客户端IP:端口已经进入聊天室”print("客户端%s:%s已经进入聊天室" % (ip_port[0], ip_port[1]))# 创建一个新线程来处理客户端请求sub_thread = threading.Thread(target=handle_client_request, args=(service_client_socket, ip_port))# 设置线程为守护线程,主线程结束时子线程也会被终止sub_thread.daemon = True# 启动线程sub_thread.start()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python3:装饰器、生成器与迭代器

Python3:装饰器、生成器与迭代器 一、🎭 装饰器:给函数穿上"魔法外衣"装饰器基本概念为装饰器添加参数传递功能带参数的装饰器functools.wraps:保留原函数的元信息实用装饰器示例1. 计时器装饰器2. 缓存装饰器(Memoizat…

SQL命令一:SQL 基础操作与建表约束

目录 引言 一、SQL 基础命令 (一)数据库相关操作 (二)表格相关操作 (三)MySQL 常用数据类型 二、增删改查(CRUD)操作 (一)增加数据 (二&a…

Windows 桌面个性高效组件工具

软件介绍 Widgets 这款基于 Vue3 构建的开源 Windows 桌面小部件工具超实用。 其多样化组件库涵盖超 20 种,从倒计时、打工进度等实用工具,到抖音热榜等实时资讯组件应有尽有,各组件独立运行,满足多场景需求。 高度自定义布局支持…

PCB入门指南:从电阻到常见电路的全解析

知识点1【电阻】 常见的是 色环电阻和贴片电阻 1、色环电阻 色环电阻,早期是碳膜电阻,精度不是很高,一般是4个色环,红 橙 黄 绿 蓝 紫 灰 白 黑,每个颜色代表一个阻值 后期是金属膜电阻,5个色环&#x…

论文阅读的三个步骤

论文阅读的三个步骤 方法说明链接:https://www.academia.edu/4907403/How_to_Read_a_Paper 方法框架如下

Centos 7 ssh连接速度慢(耗时20秒+)

作系统:centos7.9 现象突然间通过 ssh、xshell等客户端工具连接时,连接速度缓慢,需要耗时20秒左右才能连接上 排查思路: 1. 查看操作系统日志 从系统日志里看到较多的错误,这个可能是一个bug (现象类似&a…

通过脚本自动检查项目中全局的中文

现在越来越多的公司在做出海项目,出海项目首先要解决的就是语言国际化的问题,有很多如l18n、l10n的工具可以用,这些工具可以提供解决方案,但是不能约束开发者的开发行为。开发者仍然可能在代码中存留没有做过国际化处理的部分&…

软件分析师-第三遍-章节导图-13/14

系统设计,按步骤分:概要设计、详细设计。另一种分类方式:按设计内容和设计方法分。设计内容:处理流程、输入/输出原型、人机交互。设计方法:结构化、面向对象、设计模式。 软件实现&测试,分为实现、测…

通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献

Title 题目 Hashimoto’s thyroiditis recognition from multi-modal data via globalcross-attention and distance-aware training 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎 01 文献速递介绍 桥本氏甲状腺炎(HT)&a…

刀客doc:小红书商业技术负责人苍响离职

根据大厂日爆的爆料,小红书商业化再度迎来高层人事变动,原商业平台技术负责人苍响(薯名),职级L2,已于本月正式离职,其下属团队现由电商业务负责人接管。 根据刀客doc获得的资料,苍响…

Manus AI多语言手写识别技术全解析:从模型架构到实战部署

简介 Manus AI作为当前多语言手写识别领域的领军技术,其核心创新在于融合三维卷积网络、动态特征融合引擎和混合解码系统,实现了对112种语言的98.7%识别准确率和8ms延迟的实时处理能力。本文将深入探讨Manus AI的架构设计、特征提取方法、数据预处理策略…

华为云Astro大屏从iotda影子设备抽取数据做设备运行状态的大屏实施步骤

目录 背景与意义 1. 准备阶段 2. IoTDA 开放影子查询API 3. Astro轻应用创建连接器 4. Astro大屏设计界面 5. 数据绑定与交互逻辑 6. 发布与测试 小结(流程复盘) 背景与意义 随着物联网技术的快速发展,越来越多的设备接入云端&#x…

为什么要学习《易经》?

《易经》精华解读:变易之道与人生智慧 《易经》(《周易》)是中国最古老的经典之一,被誉为“群经之首,大道之源”。它不仅是占卜之书,更是一部哲学经典,揭示了宇宙运行的规律和人生处世的智慧。…

逆传播AIGEO营销:破局生成式搜索时代,让AI成为品牌代言人!

当GS(Generative Search生成式搜索)成为用户的新“搜索入口”,你的品牌还在进行传统软文发布吗? Gartner分析师预测"到2026年70%企业将把生成式AI整合进核心营销系统",传统SEO的正被AI搜索彻底重构。用户的搜索行为发生史诗级转变&#xff0…

WPF(Windows Presentation Foundation)的内容模型

WPF(Windows Presentation Foundation)的内容模型(Content Model)是其核心架构之一,定义了UI元素如何组织和呈现内容。以下是WPF内容模型的系统化解析: 1. 内容模型基础概念 WPF通过逻辑树和可视化树管理内…

52.[前端开发-JS实战框架应用]Day03-AJAX-插件开发-备课项目实战-Lodash

常用JavaScript库 1 认识前端工具库 前端工具类库 2 Lodash vs underscore underscore库 VS Lodash库 Lodash库 的安装 手写精简版的Lodash ;(function(g) {function Lodash() {}// 添加类方法Lodash.VERSION 1.0.0Lodash.join function(arr, separater) {// todo ......…

前端Ui设计工具

PS 稿、蓝湖、Sketch 和 Figma 前端 UI 设计工具的对比分析 PS 稿(Adobe Photoshop) 提供精准设计细节:PS 稿能让前端更精准地理解页面布局、元素尺寸、颜色等,通过精确测量和查看信息面板,把握设计元素的空间关系、…

映射关系5

明白!🚀 你要我 继续扩展,在这套 C98 代码里加一个功能: 根据完整的5位ID,反查出对应的路径。 OK,我直接接着上面那版来,给你补充 getPathFromId 方法,并且保持整体风格统一&#…

编译原理:由浅入深从语法树到文法类型

文法与语言基础:从语法树到文法类型 文法(Grammar)和语言(Language)是计算机科学和语言学中解析和理解语言结构的核心概念。无论是编程语言的编译器设计,还是自然语言处理(NLP)中的…

第十三步:vue

Vue 1、上手 1、安装 使用命令:npm create vuelatestvue文件后缀为.vueconst app createApp(App):初始化根组件app.mount("#app"):挂载根组件到页面 2、文件 script标签:编写jstemplate标签:编写htmls…