Python使用twisted包进行网络通信
简介
twisted是一个封装好的网络通信的库,可以帮助我们快速进行网络编程。注意,python3中,字符串必须转码成utf8的格式,否则无法发送。比如str("test").encode("utf8")
即可
服务器server端
服务器需要进行如下操作:
- 在某个端口上一直监听客户端的请求
- 接收到客户端请求后,向客户端发出相应的回应
主要分为下面几个步骤:
- 继承protocol.Protocol建立有关的协议,并实现有关的回调函数
- 继承protocol.Factory建立通信工厂,并在buildProtocol函数中实例化1中的协议
- 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
客户端
客户端的作用如下:
- 确定服务器的IP和对应的端口号。
- 向服务器发送有关的数据包
主要分为以下几个步骤:
- 继承protocol.Protocol建立有关的协议,并实现有关的回调函数
- 继承protocol.ClientFactory类,建立客户端通信工厂
- 在通信工厂中实现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包进行网络通信相关推荐
- 安装python及扩展包时遇到的一些坑
安装python及扩展包时遇到的一些坑 安装python时,可勾选让其自动添加环境变量 用vscode配置python时,除了要下载python插件外,还需在setting中设置python解释器的路 ...
- 安装python的twisted出错_pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误) 当我们在安装scrapy的过程中出现了Twisted错误,当我们有继续安装Twisted的时候,又继续报错,通过一 ...
- python导入外部包_您会喜欢的10个外部Python软件包
python导入外部包 by Adam Goldschmidt 亚当·戈德施密特(Adam Goldschmidt) 您会喜欢的10个外部Python软件包 (10 External Python p ...
- Python的常用包有哪些,分别有什么作用?
[每日一问] Python的常用包有哪些,分别有什么作用? 来自Datawhale优秀回答者:追风者 Python常用包 1.Numpy(数值运算库) 2.Scipy(科学计算库) 3.Matplot ...
- python模块和包用法详解(__all__)
1. 模块 Python 模块(Module),是⼀个 Python ⽂件,以 .py 结尾,包含了 Python 对象定义和Python语句. 模块能定义函数,类和变 ...
- Python使用numpy包编写自定义函数计算平均绝对误差(MAE、Mean Absolute Error)、评估回归模型和时间序列模型、解读MAE
Python使用numpy包编写自定义函数计算平均绝对误差(MAE.Mean Absolute Error).评估回归模型和时间序列模型.解读MAE 目录
- python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation)
python使用statsmodels包中的tsaplots函数和lags参数可视化时间序列数据指定滞后位置个数(级别)以前的所有自相关性(plot the autocorrelation Funct ...
- python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD)
python使用statsmodels包中的robust.mad函数以及pandas的apply函数计算dataframe中所有数据列的中位数绝对偏差(MAD.Median Absolute Devi ...
- Python使用numpy包编写自定义函数计算均方误差(MSE、mean squared error)、评估回归模型和时间序列模型、解读MSE评估指标
Python使用numpy包编写自定义函数计算均方误差(MSE.mean squared error).评估回归模型和时间序列模型.解读MSE评估指标 目录
最新文章
- Linux系统备份树莓派,全平台备份树莓派的方法
- 快捷键设置_win10自带截图工具如何使用 、设置快捷键
- QT Desinger设计窗体应用程序框架
- iOS开发 - 获取时间段
- 【NLP】有三AI NLP知识星球来了,仅此一家别无分店
- 视觉SLAM回环检测、词袋模型和视觉位置识别--论文记录和实验简析
- 这些职场办公神器,你会喜欢的!
- Android 长按照片保存 工具类
- ch341a编程和ttl刷机区别_土豪金CH341a编程器 开箱晒物
- 面试官:如何实现 List 集合去重?
- 50%企业数据治理失败!这9大要素才是成功关键
- 10大PHP比特币开源项目
- mysql数据库什么是事件_[数据库]Mysql 事件(定时任务)
- Linux进程管理---task_struct
- Sentinel 2(哨兵2)卫星遥感数据的波段和组合介绍
- 区块链技术与应用简明PPT
- 现代雷达系统分析与设计---动目标检测(MTD)
- PS4 Pro 拆机记
- 访问win7默认共享
- 华为发布八核处理器Kirin 920