twisted 网络框架例子ECHO

twisted 网络框架例子:ECHO

服务器端

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
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from twisted.internet import protocol
from twisted.internet import reactor

"""
定义一个事件ECHO类,这个类继承了protocol.Protocol,用于连接成功了以后,处理交互功能,数据的收发,连接的断开都是这个类控制
"""

class Echo(protocol.Protocol):
def dataReceived(self, data): #这个函数就是用于当收到数据以后才调用
self.transport.write(data) # 这里这个收到数据以后:支持把数据发回去,作为处理

"""
定义个运行的函数,
"""

def main():
factory = protocol.ServerFactory() #这是实例化factory,目的是在连接成功以后生成一个协议对象
factory.protocol = Echo #这里生成的协议对象就是前面我们定义的Echo

# reactor用来loop循环执行事件的处理,这里绑定了9000端口作为网络通信端口
reactor.listenTCP(9000,factory)
reactor.run()

if __name__ == '__main__':
main()

客户端

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from twisted.internet import reactor, protocol

"""
这是定义一个客户端的类,同样继承了protocal.Protocol
"""


class EchoClient(protocol.Protocol):
"""这个方法定义了当和服务器的连接建立成功以后调用"""
def connectionMade(self):
# 打印输出:准备发送数据
print("connection is build, sending data...")
# 直接发送消息
self.transport.write("hello alex!")

def dataReceived(self, data):
"这个函数方法是当数据收到这个事件时如何处理"
print "Server said:", data #打印出服务端返回的数据
#self.transport.loseConnection()
exit('exit') # 直接退出

"""
出现连接断开这个事件后调用
"""

def connectionLost(self, reason):
print "====connection lost==="

"""
同服务端的类似,定义一个客户端的类,基础了protocol.ClinetFactory 用于定义客户端的遇到事件触发时候调用方法
"""

class EchoFactory(protocol.ClientFactory):
protocol = EchoClient #指定当连接建立成功事件以后,EchoClinet方法来处理交互

# 这里是当连接不能建立的事件调用
def clientConnectionFailed(self, connector, reason):
print "Connection failed - goodbye!"
reactor.stop()

# 这里是关闭连接的事件调用
def clientConnectionLost(self, connector, reason):
print "Connection lost - goodbye!"
reactor.stop()


# 主要运行程序,实例化前面定义过的类,使用reactor来loop循环监听到9000端口,interface网络接口是localhots,
def main():
f = EchoFactory()
reactor.connectTCP("localhost", 9000, f)
reactor.run()

# this only runs if the module was *not* imported
if __name__ == '__main__':
main()
文章目录
  1. 1. twisted 网络框架例子:ECHO
  • 服务器端
  • 客户端