Python网络框架Twisted的使用

Twisted是用Python写的事件驱动的网络引擎,开源MIT协议,目前Twisted主要运行于Python2上,越来越多的子集将支持Python3.

Twisted支持许多通用的网络协议,如SMTP、POP3、IMAP、SSHV2和DNS等。

一、Twisted的安装

在cmd下直接运行pipinstall Twisted,需要管理员权限。


二、服务器代码编写

1、需要引用的库

from twisted.internet import protocol, reactor
from twisted.internet.endpoints import TCP4ServerEndpoint
# TCP4ServerEndpoint 需要win32api
from time import ctime
2、定义服务器端协议类

class TSServerProtocol( protocol. Protocol):
"""
服务器端协议
每一个客户端连接对应一个实例。
"""
def __init__( self):
self.clientInfo = "" # clientInfo 将保存客户端连接信息。

def connectionMade( self):
self.clientInfo = self.transport.getPeer()
print( "来自%s的连接" % ( self.clientInfo))

def dataReceived( self, data):
recData = data.decode()
print( "收到来自%s的数据:%s" % ( self.clientInfo, recData))
rep = '[%s] %s' % (ctime(), recData)
self.transport.write(rep.encode())
3、定义服务器端工厂类

class TSServerFactory( protocol. Factory):
def buildProtocol( self, addr):
return TSServerProtocol()
4、使用reactor启动端口监听

endpoint = TCP4ServerEndpoint(reactor, PORT)
endpoint.listen(TSServerFactory())
print( "等待客户端连接")
reactor.run()

三、客户端代码的编写

1、引用的库

from twisted.internet import protocol, reactor
2、定义客户端协议类

class TSClientProtocol( protocol. Protocol):
def sendData( self):
data = input( "> ")
if data:
self.transport.write(data.encode())
else:
self.transport.loseConnection()

def connectionMade( self):
self.sendData()

def dataReceived( self, data):
recData = data.decode() # 将二进制数据转换为字符串数据。
print( "从服务器上收到的数据:%s" % (recData))
self.sendData()
3、定义客户端工厂类

class TSClientFactory( protocol. ClientFactory):
protocol = TSClientProtocol
clientConnectionLost = clientConnectionFailed = lambda self, connector, reason:reactor.stop()
4、使用reactor启动连接

reactor.connectTCP(HOST, PORT, TSClientFactory())
reactor.run()

备注

有些功能需要win32api模块,可从从https://sourceforge.net/projects/pywin32下载对应的版本


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值