当前位置: 首页 > news >正文

python网络通信框架_Python——Twisted框架(网络通信)

一、简介

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

二、服务端

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

1、在某个端口上一直监听客户端的请求

2、接收到客户端请求后,向客户端发出相应的回应

主要分为下面几个步骤:

1、继承protocol.Protocol建立有关的协议,并实现有关的回调函数

2、继承protocol.Factory建立通信工厂,并在buildProtocol函数中实例化1中的协议

3、reactor.listenTCP(8000, QuoteFactory()) 在某个端口运行通信工厂

#-*- coding utf-8 -*-

from twisted.internet.protocol importFactory, connectionDonefrom twisted.internet importreactor, protocolclassQuoteProtocol(protocol.Protocol):def __init__(self, factory):

self.factory=factorydef connectionMade(self): #建立连接后的回调函数

self.factory.numConnections += 1

def 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 -= 1

defgetQuote(self):returnself.factory.quotedefupdateQuote(self, quote):

self.factory.quote=quoteclassQuoteFactory(Factory):

numConnections=0def __init__(self, quote=None): #数据接收后放在在quote中

self.quote = quote or str("Test").encode("utf8")defbuildProtocol(self, addr):returnQuoteProtocol(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 importreactor, protocolclassQuoteProtocol(protocol.Protocol):def __init__(self, factory):

self.factory=factorydefconnectionMade(self):

self.sendQuote()defsendQuote(self):

self.transport.write(self.factory.quote)defdataReceived(self, data):print("Received quote", data)

self.transport.loseConnection()classQuoteClientFactory(protocol.ClientFactory):def __init__(self, quote): #quote是需要发送的数据

self.quote =quotedefbuildProtocol(self, addr):returnQuoteProtocol(self)defclientConnectionFailed(self, connector, reason):print("connection failed", reason.getErrorMessage())

maybeStopReactor()defclientConnectionLost(self, connector, reason):print("connection lost", reason.getErrorMessage())

maybeStopReactor()defmaybeStopReactor():globalquote_counter

quote_counter-= 1

if notquote_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 inquotes:

reactor.connectTCP('localhost', 8000, QuoteClientFactory(quote))

reactor.run()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 品味SQL Server 2005的几个新功能
  • 金数据从excel导入时间数据会出错_网易严选数据产品实践
  • 基于Java Socket的文件UpLoad代码(完美版)-用递归解决java的目录树遍历
  • python变量定义是什么意思_抽象理解python中变量的定义过程
  • 游标的应用
  • kaggle比赛_由kaggle的一个失败的比赛引出一个CVR的小问题
  • 存储过程
  • 启动子级时出错_买面粉不能只看价格,看准包装上这两点,买面粉不出错
  • C语言中嵌入式SQL语句
  • php编译成二进制文件_基础为零?如何将 C++ 编译成 WebAssembly
  • 履带机器人运动控制器c++_PAL Robotics借助磁编码器技术实现机器人运动平衡
  • css 背景图怎么设置自动填充满_几种常见的CSS布局,新手一定要学学
  • 关于存储过程的一些tips
  • python判断文件读取结束_python中readline判断文件读取结束的方法
  • Memory Notification: Library Cache Object loaded into SGA
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • 5、React组件事件详解
  • Android开源项目规范总结
  • bootstrap创建登录注册页面
  • JavaScript 一些 DOM 的知识点
  • Js基础知识(四) - js运行原理与机制
  • Linux gpio口使用方法
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Rancher-k8s加速安装文档
  • React as a UI Runtime(五、列表)
  • Redis在Web项目中的应用与实践
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 代理模式
  • 对象引论
  • 飞驰在Mesos的涡轮引擎上
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用jquery写贪吃蛇
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • ## 1.3.Git命令
  • #1014 : Trie树
  • #QT 笔记一
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (~_~)
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (C++17) std算法之执行策略 execution
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (黑马C++)L06 重载与继承
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core 成都线下面基会拉开序幕
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .NET gRPC 和RESTful简单对比
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 执行Linux下多行shell命令方法