作者:zoooooz | 来源:互联网 | 2023-09-23 13:13
TwistedTeactorTCPServer#!usrbinenvpythonfromtwisted.internetimportprotocol,reactorfromtime
Twisted Teactor TCP Server
#! /usr/bin/env python
from twisted.internet import protocol,reactor
from time import ctime
'''
这是一个时间戳TCP服务器,它使用了Twisted Internet类
Twisted是用Python实现的基于事件驱动的网络引擎框架:https://www.cnblogs.com/silence-cho/p/9898984.html
'''
PORT = 21567
'''
1;reactor是twisted异步框架中的核心组件,是一个基于select,poll或epoll的事件循环,其监听socket的状态,当socket状态有变化时(有新的连接请求,或接受到数据等)时,调用相应的组件来进行处理。
2;Factory: 主要用来创建protocol,也可以定义其他操作
3;Protocol:主要用来处理连接建立和断开时的操作,以及数据的接受和发送操作
'''
class TSServProtocol(protocol.Protocol):
def connectionMade(self):
clnt = self.clnt = self.transport.getPeer().host
print('...connected from:',clnt)
def dataReceived(self, data):
self.transport.write(data)
factory = protocol.Factory()
factory.protocol = TSServProtocol
print('waiting for connection...')
reactor.listenTCP(PORT,factory)
reactor.run()
'''
英语翻译:
1;protocol 协议
2;reactor 反应器
'''
Twisted Teactor TCP Client
#! /usr/bin/env python
from twisted.internet import protocol,reactor
HOST = 'localhost'
PORT = 21567
class TSClntProtocol(protocol.Protocol):
def sendData(self):
data = input('> ')
if data:
print("...sending %s..." % data)
self.transport.write(data)
else:
self.transport.loseConnection()
def connectionMade(self):
self.sendData()
def dataReceived(self, data):
print(data)
self.sendData()
class TSClntFactory(property.ClientFactory):
protocol = TSClntProtocol
clientCOnnectionLost= clientCOnnectionFailed= lambda self ,connector,reason:reactor.stop()
reactor.connectTcp(HOST,PORT,TSClntFactory())
reactor.run()