python epoll聊天室程序

简介:
 仿照《how to use linux epoll with python》写的一个聊天室程序,比较简单。
python版本:2.7.3
 

 
 
  1. #!/usr/bin/python  
  2. # -*- coding:utf-8 -*- 
  3.  
  4. import socket, select 
  5.  
  6. for res in socket.getaddrinfo('0.0.0.0', 1025, socket.AF_INET, socket.SOCK_STREAM): 
  7.     fa, socktype, proto, canonname, sa = res 
  8.  
  9. SockServer = socket.socket(fa, socktype, proto)  
  10. SockServer.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
  11. SockServer.bind(sa) 
  12. SockServer.listen(5) 
  13.  
  14. epoll = select.epoll() 
  15. epoll.register(SockServer.fileno(), select.EPOLLIN) 
  16.  
  17. try: 
  18.     conns={}; addrs={} 
  19.  
  20.     while True: 
  21.         for fileno, event in epoll.poll(1): 
  22.             if fileno == SockServer.fileno(): 
  23.                 conn, addr = SockServer.accept() 
  24.  
  25.                 epoll.register(conn.fileno(), select.EPOLLIN) 
  26.                 conns[conn.fileno()] = conn 
  27.                 addrs[conn.fileno()] = addr 
  28.  
  29.                 conn.send("--- Welcome to server. Type EXIT to quit. ---\n") 
  30.                 print '[server]: accept connection from %s<%s>' % addr 
  31.  
  32.             elif event & select.EPOLLIN: 
  33.                 message = conns[fileno].recv(1024) 
  34.                 print "%s<%s> say: " % (addrs[fileno][0], addrs[fileno][1]) + message.strip() 
  35.  
  36.                 if b'EXIT' in message: 
  37.                     epoll.modify(fileno, select.EPOLLOUT) 
  38.  
  39.                 for key in conns.keys(): 
  40.                     if key != fileno: 
  41.                         conns[key].send('%s<%s> say: %s' % (addrs[key][0], addrs[key][1], message)) 
  42.  
  43.             elif event & select.EPOLLOUT: 
  44.                 epoll.modify(fileno, 0) 
  45.                 conns[fileno].shutdown(socket.SHUT_RDWR) 
  46.  
  47.             elif event & select.EPOLLHUP: 
  48.                 epoll.unregister(fileno) 
  49.                 conns[fileno].close() 
  50.                 print '[server]: %s<%s> quit.' % addrs[fileno]  
  51.  
  52.                 del conns[fileno] 
  53.                 del addrs[fileno] 
  54.  
  55. finally: 
  56.     epoll.unregister(SockServer.fileno()) 
  57.     epoll.close() 
  58.     SockServer.close() 
程序运行如图:
 

本文转自 li_qinshan 51CTO博客,原文链接:http://blog.51cto.com/share/1183572
相关文章
|
人工智能 Linux 开发工具
Python从零到一:手把手带你写出第一个实用程序
Python语法简洁易懂,适合编程新手入门。它广泛应用于人工智能、自动化办公、Web开发等领域。学习Python可快速搭建项目,拥有丰富库支持和强大社区资源。通过本教程,你将掌握基础语法、环境搭建、程序逻辑控制及实战项目开发,开启编程之旅。
1634 0
|
设计模式 决策智能 Python
Python条件控制:让程序学会"思考"的魔法
本文深入浅出地讲解Python条件控制,从基础if语句到多分支、嵌套结构,再到简洁的三元表达式与Python 3.10新增的match-case模式匹配,结合电商折扣、会员等级、ATM系统等实战案例,全面掌握程序“智能决策”的核心逻辑。
751 0
|
人工智能 并行计算 开发者
CUDA重大更新:原生Python可直接编写高性能GPU程序
NVIDIA在2025年GTC大会上宣布CUDA并行计算平台正式支持原生Python编程,消除了Python开发者进入GPU加速领域的技术壁垒。这一突破通过重新设计CUDA开发模型,引入CUDA Core、cuPyNumeric、NVMath Python等核心组件,实现了Python与GPU加速的深度集成。开发者可直接用Python语法进行高性能并行计算,显著降低门槛,扩展CUDA生态,推动人工智能、科学计算等领域创新。此更新标志着CUDA向更包容的语言生态系统转型,未来还将支持Rust、Julia等语言。
1074 3
CUDA重大更新:原生Python可直接编写高性能GPU程序
|
PyTorch 算法框架/工具 C++
人工智能算法python程序运行环境安装步骤整理
本教程详细介绍Python与AI开发环境的配置步骤,涵盖软件下载、VS2017安装、Anaconda配置、PyCharm设置及组件安装等内容,适用于Windows系统,助你快速搭建开发环境。
|
机器学习/深度学习 前端开发 API
python3如何使用QT编写基础的对话框程序
Qt与Python结合形成了PyQt/PySide,为桌面应用开发提供强大支持。通过简单安装PyQt5或PySide6,开发者可快速搭建跨平台GUI应用。本文从创建基础对话框入手,介绍布局管理、信号与槽机制、对话框模式及样式表美化等核心功能,并探讨模态窗口、事件驱动编程和资源打包等内容。最后,引导读者探索模型视图架构、多线程处理等进阶技术,逐步掌握用Python+Qt开发高效桌面应用的技能。
539 0
|
Python
[oeasy]python074_ai辅助编程_水果程序_fruits_apple_banana_加法_python之禅
本文回顾了从模块导入变量和函数的方法,并通过一个求和程序实例,讲解了Python中输入处理、类型转换及异常处理的应用。重点分析了“明了胜于晦涩”(Explicit is better than implicit)的Python之禅理念,强调代码应清晰明确。最后总结了加法运算程序的实现过程,并预告后续内容将深入探讨变量类型的隐式与显式问题。附有相关资源链接供进一步学习。
360 4
|
存储 NoSQL 数据库连接
在Python程序中实现LevelDB的海量key的分批次扫描
通过本文的步骤,您可以在Python程序中实现对LevelDB海量key的分批次扫描。这样不仅能够有效地管理大规模数据,还可以避免一次性加载过多数据到内存中,提高程序的性能和稳定性。希望这篇指南能为您的开发工作提供实用的帮助。
500 28
|
安全 API C语言
Python程序的安全逆向(关于我的OPENAI的APIkey是如何被盗的)
本文介绍了如何使用C语言编写一个简单的文件加解密程序,并讨论了如何为编译后的软件添加图标。此外,文章还探讨了Python的.pyc、.pyd等文件的原理,以及如何生成和使用.pyd文件来增强代码的安全性。通过视频和教程,作者详细讲解了生成.pyd文件的过程,并分享了逆向分析.pyd文件的方法。最后,文章提到可以通过定制Python解释器来进一步保护源代码。
730 6
|
Shell 开发工具 Python
如何在vim里直接运行python程序
如何在vim里直接运行python程序

推荐镜像

更多