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

聊天室系统:多任务版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.xdnf.cn/news/2749.html

相关文章:

  • Qt C++数据库实验
  • FPGA-数字时钟
  • whois为什么有时会返回两个不同的域名状态
  • 【Linux】Java 开发者的 Linux 常用命令指南
  • 2024ICPC成都题解
  • Golang实现函数默认参数
  • 人工智能数学基础(一):人工智能与数学
  • 动态规划问题 -- 斐波那契数列模型(解码方法)
  • etcd 的安装及使用
  • 软件评测师考点重点知识
  • ubuntu安装docker,conda,tmux,btop,nvitop
  • 一种用于从视网膜图像中识别疾病的 BERT 式自监督学习 CNN
  • 大模型训练平台:重构 AI 研发范式的智慧基建
  • MCU内存映射技术详解
  • python数据分析(五):Pandas 数据检索技术
  • 鸢尾花(Iris)数据集的多模型分类与可视化分析工具
  • openai agents sdk实战-基于Ollama+qwen2.5+milvus+bge-large-zh-v1.5实现本地知识库
  • 在 C# .NET 中驾驭 JSON:使用 Newtonsoft.Json 进行解析与 POST 请求实战
  • 动态规划
  • 在g2o中,顶点(Vertex)和边(Edge)插入到概率图的流程
  • 迈瑞医疗:国际业务增长21.28% 发展中国家成重要增长引擎
  • 如何修复卡在恢复模式下的 iPhone:简短指南
  • 配置管理平台Nacos01:基础安装教程和启动运行
  • 第十五届中国国际道路交通安全产品博览会回顾
  • 2025年ISA Trans SCI2区TOP:超级哈里斯鹰算法Super-HHO+高功率机车悬挂载荷偏差控制,深度解析+性能实测
  • 5G育种技术之植物性状订制
  • 智慧健康养老实训室建设方案:科技引领养老健康服务人才培养
  • 第十六节:开放性问题-Vue与React Hooks对比
  • 使用阿里云 CDN 保护网站真实 IP:完整配置指南
  • Wireshark快速入门--对启动的后端程序进行抓包