【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

我不擅长写socket代码。一是用c写起来比较麻烦,二是自己平时也没有这方面的需求。等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方。最近由于项目的原因需要写一些python代码,才发现在python下面开发socket是一件多么爽的事情。

对于大多数socket来说,用户其实只要关注三个事件就可以了。这分别是创建、删除、和收发数据。python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦。下面的代码来自twistedmatrix网站,我觉得挺不错的,贴在这里和大家分享一下。如果需要测试的话,直接telnet localhost 8123就可以了。如果需要在twisted中处理信号,可以先注册signal函数,在signal函数中调用reactor.stop(),后面twisted继续call stop_factory,这样就可以继续完成剩下的清理工作了。

from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactorclass Chat(LineReceiver):def __init__(self, users):self.users = usersself.name = Noneself.state = "GETNAME"def connectionMade(self):self.sendLine("What's your name?")def connectionLost(self, reason):if self.name in self.users:del self.users[self.name]def lineReceived(self, line):if self.state == "GETNAME":self.handle_GETNAME(line)else:self.handle_CHAT(line)def handle_GETNAME(self, name):if name in self.users:self.sendLine("Name taken, please choose another.")returnself.sendLine("Welcome, %s!" % (name,))self.name = nameself.users[name] = selfself.state = "CHAT"def handle_CHAT(self, message):message = "<%s> %s" % (self.name, message)for name, protocol in self.users.iteritems():if protocol != self:protocol.sendLine(message)class ChatFactory(Factory):def __init__(self):self.users = {} # maps user names to Chat instancesdef buildProtocol(self, addr):return Chat(self.users)def startFactory(self):print 'start'def stopFactory(self):print 'stop'reactor.listenTCP(8123, ChatFactory())
reactor.run()

python 编程(关于twisted)相关推荐

  1. python实现网络编程 之Twisted框架

    原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架.Twi ...

  2. 编程语言python入门要电脑什么配置能带动-对于几乎是零基础的人,直接学 Python 编程合适吗?...

    在众多高大上的自学指导中,尝试做一股清流,把要讲清楚的都讲清楚,除了一堆资料之外,你能在学之前就有一个非常明显的结果倾向. 本文以<小白带你学Python>为内容方向,试图在繁杂的信息里, ...

  3. 零基础可以学python吗-对于几乎是零基础的人,直接学 Python 编程合适吗?

    在众多高大上的自学指导中,尝试做一股清流,把要讲清楚的都讲清楚,除了一堆资料之外,你能在学之前就有一个非常明显的结果倾向. 本文以<小白带你学Python>为内容方向,试图在繁杂的信息里, ...

  4. python编程主要干嘛的-让孩子学了Python编程有什么用

    让孩子学了Python编程有什么用?只有你达不到的远方,没有Python到不了的世界. Python现在到底有多热呢?Python稳居前五!得益于Python在多个领域的应用都在逐渐变热,以至于Pyt ...

  5. python做电脑软件-Python编程软件(专业电脑编程工具)V3.9.1 最新版

    Python编程软件(专业电脑编程工具)是一款十分优秀好用的专业电脑编程辅助工具.哪款编程工具比较好用?小编为你推荐这款Python编程软件,功能强大全面,使用后可以帮助用户更轻松高效的进行电脑编程操 ...

  6. python编程工具p-这里有123个黑客必备的Python工具!

    原标题:这里有123个黑客必备的Python工具! 来自: 地球的外星人君 链接:https://zhuanlan.zhihu.com/p/28452712 今天的文章来源于dloss/python- ...

  7. python编程300集免费-python 300本电子书合集

    链接: https://pan.baidu.com/s/1CNlB35ASnDNlUGNCZJbiAA 提取码: fxig Q群:592857363 更多所在 数据科学速查表 零起点Python机器学 ...

  8. 精通 Oracle+Python 存储过程、Python 编程

    调用数据库存储过程及其他感兴趣的高级 Python 编程功能. 对于涉及数据库的软件开发来说,有两种主流开发方法:一种是在应用程序中(对于三层体系结构,也可以是在中间件中)实现所有业务逻辑,另一种是在 ...

  9. Py之twisted:Python库之twisted简介、安装、使用方法等详细攻略

    Py之twisted:Python库之twisted简介.安装.使用方法等详细攻略 目录 twisted简介 twisted安装 twisted使用方法 twisted简介 twisted 是pyth ...

最新文章

  1. Saltstack笔记
  2. 【Go】string 优化误区及建议
  3. 多台计算机怎样才能同时使用互联网,如何实现一台路由器多台计算机同时上网...
  4. shell实例第19讲:一个脚本中调用另一个脚本的3种方法
  5. 分享大厂分布式唯一ID设计方案,快来围观
  6. 【Java4】实例初始化,类初始化,/接口,多态,final/static,权限修饰符/native
  7. 华为ECS云服务器 Ubuntu 安装和配置FTP教程
  8. mysql远程连接 host_MySQL远程连接:Host 'x' is not allowed to connect to this MySQL server
  9. Python程序设计语言基础04:程序的控制结构
  10. GIMP用Path作画了解一下
  11. jscc控制器说明书_JSCC精研调速器 精研SF90E数显调速器 90W精研马达面板控制器
  12. 站群服务器用SS5 SOCKS5 配置多IP/多端口高性能代理服务器(16G内存主机支持超过100万并发S5代理)
  13. QT离线安装包下载地址
  14. 华为鸿蒙糸统其它手机可以用吗,鸿蒙系统vivo能用吗
  15. 南非SABS认证范围
  16. 音视频算法在淘宝中的应用
  17. String 字符串之截取
  18. 超详细Docker部署SpringBoot+Vue项目(三更博客项目部署)
  19. 将jar安装到本地mvn仓库
  20. 小白入门计算机视觉系列——ReID(一):什么是ReID?如何做ReID?ReID数据集?ReID评测指标?

热门文章

  1. eigrp debug命令详解
  2. 正确清理binlog日志
  3. 你以为PHP那么好自定义升级?
  4. 把uliweb项目变成可安装的python包
  5. JavaScript——Prototype详探
  6. java 实体类 时间格式字段注解
  7. mini 打开窗口提交表单,按钮在页脚
  8. UIColor与十六进制字符串互转
  9. Android开发之TextView的滚动显示
  10. cesium+ geoserverTerrainProvide+png展示3D高程图展示