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
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())
class
TSServerFactory(
protocol.
Factory):
def
buildProtocol(
self,
addr):
return TSServerProtocol()
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()
class
TSClientFactory(
protocol.
ClientFactory):
protocol = TSClientProtocol
clientConnectionLost = clientConnectionFailed =
lambda
self,
connector,
reason:reactor.stop()
reactor.connectTCP(HOST, PORT, TSClientFactory())
reactor.run()
备注:
有些功能需要win32api模块,可从从https://sourceforge.net/projects/pywin32下载对应的版本