Twisted 是一个完全事件驱动的网络框架。它允许你使用和开发完全异步的网络应用程序和协议。Twisted 同时支持许多常见的网络协议,包括SMTP, POP3, IMAP, SSHv2, 和DNS。
Twisted 安装:
到http://twistedmatrix.com/trac/ 去下载安装。windows可以下载msi格式的安装文件,安装简便。
下面是一个简单的客户端服务器端代码。客户端可以输入date,ls等命令,服务器根据命令返回不同的结果。
服务器部分
# -*- coding: utf-8 -*-
from twisted.internet import protocol, reactor
from time import ctime
import os
PORT = 21567
class TSServProtocol(protocol.Protocol):
def connectionMade(self):
clnt = self.clnt = self.transport.getPeer().host
print '...connected from:', clnt
def dataReceived(self, data):
if data == "date":
self.transport.write('current date is [%s]' % ctime())
elif data == "ls":
dirs = os.listdir(os.getcwd())
list = ''
for d in dirs:
list += str(d)+"\n"
self.transport.write('current list is \n %s' % list)
else:
self.transport.write('Please input the right option')
factory = protocol.Factory()
factory.protocol = TSServProtocol
print 'waiting for connection...'
reactor.listenTCP(PORT, factory)
reactor.run()
客户端部分
# -*- coding: utf-8 -*-
from twisted.internet import protocol, reactor
HOST = 'localhost'
PORT = 21567
class TSClntProtocol(protocol.Protocol):
def sendData(self):
data = raw_input('> ')
if data:
self.transport.write(data)
else:
self.transport.loseConnection()
def connectionMade(self):
print "========option============"
print " [date]:current date"
print " [ls]:dir list"
print "=========================="
self.sendData()
def dataReceived(self, data):
print data
self.sendData()
class TSClntFactory(protocol.ClientFactory):
protocol = TSClntProtocol
clientConnectionLost = clientConnectionFailed = lambda self, connector, reason: reactor.stop()
reactor.connectTCP(HOST, PORT, TSClntFactory())
reactor.run()
运行结果
服务器端:
客户端: