VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Python基础教程 >
  • python基础教程之python-网络编程(5)

  

回到顶部

2.7.Twisted框架

twisted是一个用python语言写的事件驱动的网络框架,他支持很多种协议,包括UDP,TCP,TLS和其他应用层协议,比如HTTP,SMTP,NNTM,IRC,XMPP/Jabber。 非常好的一点是twisted实现和很多应用层的协议,开发人员可以直接只用这些协议的实现。其实要修改Twisted的SSH服务器端实现非常简单。很多时候,开发人员需要实现protocol类。

一个Twisted程序由reactor发起的主循环和一些回调函数组成。当事件发生了,比如一个client连接到了server,这时候服务器端的事件会被触发执行。

安装方法:

进入链接https://pypi.org/simple/twisted/下载安装包进行安装。

方法二:

1
2
3
sudo apt-get install python-setuptools
sudo apt-get install python-dev
sudo easy_install twisted  

 

服务端:#!/use/bin/env python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# -*- coding: utf-8 -*-
 
from twisted.internet import protocol, reactor
import time
 
PORT = 21567
<br>#获得protocol类并为时间戳服务器调用TSServProtocol,然后重写了connetctionMade()和dataReceived()方法<em id="__mceDel"><br>class TSServProtocol(protocol.Protocol):<br>   #当客户端连接到服务器时就执行connectionMade()
   def connectionMade(self):
        clnt =self.clnt = self.transport.getPeer().host
        print '...connected from:', clnt<br>   #当服务器接收到客户端请求时执行dataReceived()
   def dataReceived(self, data):
        lotime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        self.transport.write('[%s] %s' % (lotime, data))
 
factory = protocol.Factory()
factory.protocol = TSServProtocol
print 'waiting for connection ...'
reactor.listenTCP(PORT, factory)
reactor.run()
</em>

  

客户端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/use/bin/env python
# -*- 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:
            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(protocol.ClientFactory):
    protocol = TSClntProtocol
    clientConnectionLost = clientConnectionFalied = lambda self, connector, reason: reactor.stop()
 
reactor.connectTCP(HOST, PORT, TSClntFactory())
reactor.run()
相关教程