简介

twisted是一个封装好的网络通信的库,可以帮助我们快速进行网络编程。注意,python3中,字符串必须转码成utf8的格式,否则无法发送。比如str("test").encode("utf8")即可

服务器server端

服务器需要进行如下操作:

  1. 在某个端口上一直监听客户端的请求
  2. 接收到客户端请求后,向客户端发出相应的回应

主要分为下面几个步骤:

  1. 继承protocol.Protocol建立有关的协议,并实现有关的回调函数
  2. 继承protocol.Factory建立通信工厂,并在buildProtocol函数中实例化1中的协议
  3. reactor.listenTCP(8000, QuoteFactory()) 在某个端口运行通信工厂
# -*- coding utf-8 -*-
from twisted.internet.protocol import Factory, connectionDone
from twisted.internet import reactor, protocolclass QuoteProtocol(protocol.Protocol):def __init__(self, factory):self.factory = factorydef connectionMade(self):  # 建立连接后的回调函数self.factory.numConnections += 1def dataReceived(self, data):  # 接收到数据后的回调函数print("Number of active connections: %d"% self.factory.numConnections)print("Received:%s\n Sending: %s" % (data, self.getQuote()))self.transport.write(self.getQuote())self.updateQuote(data)def connectionLost(self, reason=connectionDone):  # 断开连接后的反应self.factory.numConnections -= 1def getQuote(self):return self.factory.quotedef updateQuote(self, quote):self.factory.quote = quoteclass QuoteFactory(Factory):numConnections = 0def __init__(self, quote=None):  # 数据接收后放在在quote中self.quote = quote or str("Test").encode("utf8")def buildProtocol(self, addr):return QuoteProtocol(self)reactor.listenTCP(8000, QuoteFactory())
reactor.run()# service_identity

客户端

客户端的作用如下:

  1. 确定服务器的IP和对应的端口号。
  2. 向服务器发送有关的数据包

主要分为以下几个步骤:

  1. 继承protocol.Protocol建立有关的协议,并实现有关的回调函数
  2. 继承protocol.ClientFactory类,建立客户端通信工厂
  3. 在通信工厂中实现buildProtocol的协议,并实现链接失败的处理函数
# -*- coding utf-8 -*-
from twisted.internet import reactor, protocolclass QuoteProtocol(protocol.Protocol):def __init__(self, factory):self.factory = factorydef connectionMade(self):self.sendQuote()def sendQuote(self):self.transport.write(self.factory.quote)def dataReceived(self, data):print("Received quote", data)self.transport.loseConnection()class QuoteClientFactory(protocol.ClientFactory):def __init__(self, quote):  # quote是需要发送的数据self.quote = quotedef buildProtocol(self, addr):return QuoteProtocol(self)def clientConnectionFailed(self, connector, reason):print("connection failed", reason.getErrorMessage())maybeStopReactor()def clientConnectionLost(self, connector, reason):print("connection lost", reason.getErrorMessage())maybeStopReactor()def maybeStopReactor():global quote_counterquote_counter -= 1if not quote_counter:reactor.stop()quotes = [str("You snooze you lose").encode(),str("The early brid gets worm").encode(),str("Carpe diem").encode()
]quote_counter = len(quotes)for quote in quotes:reactor.connectTCP('localhost', 8000, QuoteClientFactory(quote))reactor.run()

Python使用twisted包进行网络通信相关推荐

  1. 安装python及扩展包时遇到的一些坑

    安装python及扩展包时遇到的一些坑 安装python时,可勾选让其自动添加环境变量 用vscode配置python时,除了要下载python插件外,还需在setting中设置python解释器的路 ...

  2. 安装python的twisted出错_pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)

    pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误) 当我们在安装scrapy的过程中出现了Twisted错误,当我们有继续安装Twisted的时候,又继续报错,通过一 ...

  3. python导入外部包_您会喜欢的10个外部Python软件包

    python导入外部包 by Adam Goldschmidt 亚当·戈德施密特(Adam Goldschmidt) 您会喜欢的10个外部Python软件包 (10 External Python p ...

  4. Python的常用包有哪些,分别有什么作用?

    [每日一问] Python的常用包有哪些,分别有什么作用? 来自Datawhale优秀回答者:追风者 Python常用包 1.Numpy(数值运算库) 2.Scipy(科学计算库) 3.Matplot ...

  5. python模块和包用法详解(__all__)

    1. 模块         Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句.         模块能定义函数,类和变 ...

  6. Python使用numpy包编写自定义函数计算平均绝对误差(MAE、Mean Absolute Error)、评估回归模型和时间序列模型、解读MAE

    Python使用numpy包编写自定义函数计算平均绝对误差(MAE.Mean Absolute Error).评估回归模型和时间序列模型.解读MAE 目录

  7. python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)

    python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...

  8. python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)

    python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...

  9. Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标

    Python使用numpy包编写自定义函数计算均方误差(MSE.mean squared error).评估回归模型和时间序列模型.解读MSE评估指标 目录

最新文章

  1. Linux系统备份树莓派,全平台备份树莓派的方法
  2. 快捷键设置_win10自带截图工具如何使用 、设置快捷键
  3. QT Desinger设计窗体应用程序框架
  4. iOS开发 - 获取时间段
  5. 【NLP】有三AI NLP知识星球来了,仅此一家别无分店
  6. 视觉SLAM回环检测、词袋模型和视觉位置识别--论文记录和实验简析
  7. 这些职场办公神器,你会喜欢的!
  8. Android 长按照片保存 工具类
  9. ch341a编程和ttl刷机区别_土豪金CH341a编程器 开箱晒物
  10. 面试官:如何实现 List 集合去重?
  11. 50%企业数据治理失败!这9大要素才是成功关键
  12. 10大PHP比特币开源项目
  13. mysql数据库什么是事件_[数据库]Mysql 事件(定时任务)
  14. Linux进程管理---task_struct
  15. Sentinel 2(哨兵2)卫星遥感数据的波段和组合介绍
  16. 区块链技术与应用简明PPT
  17. 现代雷达系统分析与设计---动目标检测(MTD)
  18. PS4 Pro 拆机记
  19. 访问win7默认共享
  20. 华为发布八核处理器Kirin 920

热门文章

  1. php 没有权限,PHP出现操作文件没有权限怎么办?
  2. 牛客 —— 湖南大学第十六届程序设计竞赛(重现赛)
  3. Python面向对象几个知识点
  4. 表达式转换成后缀表达式进行计算
  5. MD5之C#密码加密-备忘录
  6. bigdata learning unit two--Spark environment setting
  7. Swift - Realm数据库的使用详解(附样例)
  8. 高校学生学籍系统C++amp;mysql
  9. c#转换XML文件和json对象
  10. android PopupWindow 显示问题