python笔记-Twisted 实现简单的服务器客户端程序

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() 

运行结果

服务器端:




客户端:



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值