import socketserver
import threading#启动服务
class Myhandler(socketserver.BaseRequestHandler):def setup(self):super().setup()self.event = threading.Event()def handle(self):super().handle()print(self.server,self.client_address,self.request)while not self.event.wait(1):data = self.request.recv(1024)msg = 'Your msg = {}'.format(data.decode()).encode()print(msg)self.request.send(msg)def finish(self):super().finish()self.event.set()addr = ('127.0.0.1',9999)
server = socketserver.ThreadingTCPServer(addr,Myhandler)server.serve_forever()print('-------------[end]--------------------')
server.shutdown()server.server_close()

运行结果:

<socketserver.ThreadingTCPServer object at 0x7f1c59c66a58> ('127.0.0.1', 59624) <socket.socket fd=4, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 9999), raddr=('127.0.0.1', 59624)>
b'Your msg = hello\r\n'
b'Your msg = python\r\n'
b'Your msg = quit\r\n'
b'Your msg = '
b'Your msg = '

改进:

import socketserver
import threading
import logginglogging.basicConfig(level=logging.INFO)class MyHandler(socketserver.BaseRequestHandler):# 客户端信息clients = {}def setup(self):self.event = threading.Event()def handle(self):# 接受到了数据,分发conn = self.requestself.clients[self.client_address] = connwhile not self.event.is_set():try:data = conn.recv(1024).decode().strip()#处理客户段主动断开的异常(非quit)if not data:raise BrokenPipeErrorexcept Exception as e:logging.info(e)data = 'quit'logging.info(data)# 客户端通知,退出机制if data == 'quit':logging.info('quit!')breakmsg = 'ack {}\n'.format(data)for c in self.clients.values():c.send(msg.encode())def finish(self):super().finish()self.event.set()self.clients.pop(self.client_address)ip = '127.0.0.1'
port = 9999
addr = (ip, port)
server = socketserver.ThreadingTCPServer(addr, MyHandler)
threading.Thread(target=server.serve_forever, name='myserver', daemon=True).start()  # 需等待客户端退出后,主线程才能正常结束import myutilsmyutils.showthreads()while True:cmd = input('>>>>').strip()if cmd == 'quit':server.shutdown()server.server_close()break



运行结果:

>>>>INFO:root:[<_MainThread(MainThread, started 140073430714112)>, <Thread(myserver, started daemon 140073405835008)>, <Thread(showthread, started daemon 140073397442304)>]
INFO:root:[<_MainThread(MainThread, started 140073430714112)>, <Thread(myserver, started daemon 140073405835008)>, <Thread(Thread-1, started 140073389049600)>, <Thread(Thread-2, started 140073177708288)>, <Thread(showthread, started daemon 140073397442304)>]
INFO:root:hello
INFO:root:[<_MainThread(MainThread, started 140073430714112)>, <Thread(myserver, started daemon 140073405835008)>, <Thread(Thread-1, started 140073389049600)>, <Thread(Thread-2, started 140073177708288)>, <Thread(showthread, started daemon 140073397442304)>]
INFO:root:python
INFO:root:quit
INFO:root:quit!
INFO:root:[<_MainThread(MainThread, started 140073430714112)>, <Thread(myserver, started daemon 140073405835008)>, <Thread(Thread-2, started 140073177708288)>, <Thread(showthread, started daemon 140073397442304)>]
INFO:root:quit
INFO:root:quit!
INFO:root:[<_MainThread(MainThread, started 140073430714112)>, <Thread(myserver, started daemon 140073405835008)>, <Thread(showthread, started daemon 140073397442304)>]
quit

实用:python网络开发中多人聊天室的实现(socketserver)相关推荐

  1. 编写敏感词过滤程序 说明:在网络程序中,如聊天室、聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤。 如“性”、“色情”、“爆炸”、“恐怖”、“枪”、“军火”等,这些都不可以在网

    编写敏感词过滤程序 说明:在网络程序中,如聊天室.聊天软件等,经常需要对一些用户所提交的聊天内容中的敏感性词语进行过滤. 如"性"."色情"."爆炸& ...

  2. linux网络编程TCP多人聊天室

    用socket实现一个多人聊天室的思路很简单,即在服务器端定义一个fd的int型数组,用来存储已经连接的客户端的socket连接套接字fd(因为发送和接收数据都只需要借助连接套接字fd),当服务器接收 ...

  3. Python中基于TCP网络通信协议的多人聊天室

    1.服务端设置 1.1 相关配置信息 便于后期维护修改,将数据协议的相关配置和服务器配置,以及登录验证的数据库信息单独建立一个.py文件.需根据自己服务器ip修改. #------数据协议相关配置-- ...

  4. 网络编程项目—— 多人聊天室->双人聊天

    一.Coding前的思考和步骤梳理 1. 又开始思考这个问题,拿到一个需求,是调用java底层的代码写1000行实现,还是直接调第三方库写50行实现? 都一样. 发现第一次写shell的时候其实思考过 ...

  5. 基于 Vue 开发一个 多人聊天室(万字长文) - 从 0 到 1 篇

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...

  6. 基于Python的多人聊天室的设计与实现

    基于Python的多人聊天室的设计与实现 摘要  本文介绍了基于即时通讯的Python实现web版多人聊天室的设计和实现.这个系统利用了多种先进的技术,如Django.Channels.WebSock ...

  7. 微信小程序用云开发实现多人聊天2020/05/21

    微信小程序用云开发实现多人聊天室 微信小程序用云开发实现多人聊天2020/05/21 效果图片 js wxml wxss 微信小程序用云开发实现多人聊天2020/05/21 用微信云开发实现聊天室 无 ...

  8. Python实现网络多人聊天室

    网络多人聊天室 相关连接:Python实现网络图形化界面多人聊天室 文件结构: chatroom ├── client.py  # 客户端代码 ├── language.py  # 语言文件 ├── ...

  9. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信

    基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...

最新文章

  1. 一个效率更高的全半角字符串截取函数
  2. 记录ASP.NET CORE 3 部署过程
  3. BZOJ 2095 [POI2010]Bridges (最大流、欧拉回路)
  4. windows2016 安装mysql5.7
  5. 文献记录(part54)--软件缺陷预测中基于聚类分析的特征选择方法
  6. ROS配置分布式通信
  7. C++ 序列式容器之vector
  8. jquery 动态添加,降低input表单的方法
  9. 基于微服务的分布式自动化测试平台
  10. mysql数据库创建删除带横杠的数据库名
  11. SqlServer导出为mdf
  12. 【瑞芯微RK3188 VS 全志A31】性能向多项目对比评测
  13. Unity3D 2D设计小游戏移动幻影的实现
  14. 对服务器进行DDoS攻击测试
  15. 权限漏洞:水平权限漏洞、垂直权限漏洞
  16. kubernetes部署nfs持久存储(静态和动态)
  17. 在线制作流程图的实用工具网站
  18. 【号外20191127】微软刚刚更新了snipping tool
  19. 【CMS建站】写给大家看的网站制作教程01—了解网站制作流程
  20. Java高效处理Excel【阿里yyds!】

热门文章

  1. 麦语言和python区别_GitHub - bankwang/funcat: Funcat 将同花顺、通达信、文华财经麦语言等的公式写法移植到了 Python 中。...
  2. 无线网如何访问服务器公共盘,如何访问双频无线路由器网络共享服务器
  3. Java制作报表系统流程_finereport报表制作详细过程
  4. 整理C/C++中的64位整型
  5. CAN总线数据分析 汽车CAN总线
  6. JSD-2204-Java语言基础-分支结构-循环-Day04
  7. 初中计算机应用教什么,《初中信息技术课程中为什么要学习excel》
  8. 2021-07-01验证用户账号密码登录,三次输入错误要验证码
  9. python实现批量修改图片尺寸和图片名称
  10. 民警同志立刻往女同志那儿走来