搭建Twisted Reactor TCP 服务器与客户端(文末有福利)
2017-08-14 01:37
579 查看
Twisted是用Python实现的基于事件驱动的网络引擎框架。
Twisted使用了更多的基于事件的方式。要写一个基本的服务器,你要实现事件处理 器,它处理诸如一个新的客户端连接、新的数据到达和客户端连接中断等情况。在Twisted中,你的事件处理器定义在一个protocol中;你也需要一 个factory,当一个新的连接到达时它能够构造这个protocol对象,但是如果你仅仅想创建一个自定义的Protocol类的实例的话,你可以使 用来自Twisted的factory,Factory类在模块twisted.internet.protocol中。当你写你的protocol时, 使用twisted.internet.protocol模块中的Protocol作为你的父类。当你得到一个连接时,事件处理器 connectionMade被调用;当你丢失了一个连接时,connectionLost被调用。从客户端接受数据使用处理器 dataReceived。但是你不能使用事件处理策略向客户端发送数据;要向客户端发送数据,你可以使用self.transport,它有一个 write方法。它也有一个client属性,其中包含了客户端的地址(主机名和端口)。 下面这个例子是一个Twisted版的服务器。 其中实例化了Factory并设置了它的protocol属性以便它知道使用哪个protocol与客户端通信(这就是所谓的你的自定义 protocol)。然后你使用factory开始监听指定的端口,factory通过实例化的protocol对象处理连接。监听使用reactor模 块中的listenTCP函数。最后,你通过调用reactor模块中的run函数来开始服务器。
服务器代码如下:
#!/usur/bin/env python #-*- coding:UTF-8 -*- import twisted from twisted.internet.protocol import Protocol,Factory from twisted.internet import reactor from time import ctime PORT=21567 class TSServProtocol (protocol.Protocol) def connectionMade(self): clnt=self.clnt=self.transport.getPeer().host print '...connected from :',clnt def dataReceived(self,data): self.transport.write('[%s] %s'%(ctime(),data)) factory=protocol.Factory() factory.protocol=TSServProtocal print 'waiting for connection...' reactor.listenTCP(PORT,factory) reactor.run()
败笔:运行报错,百思不得解
File "E:/python/xiang mu/tsTservTW.py", line 11 class TSServProtocol (protocol.Protocol) ^ SyntaxError: invalid syntax Process finished with exit code 1
客户端代码:
#!/usur/bin/env python#-*- coding:UTF-8 -*-from twisted.internet.protocol import Protocolfrom twisted.internet import reactorHOST='localhost'PORT=21567class TSClntProtocol (protocol.Protocol)def sendData(self):data=raw_input('> ')if data:print '...sending %s...'%dataself.transport.write(data)else:self.transport.loseConnection()def connectionMade(self):self.sendData()def dataReceived(self,data):print dataself.sendData()class TSClntFactory(protocol.ClientFactory):protocol=TSClntProtocolclientConnectionLost=clientConnectionFailed= \lambda self, connector, reason:reactor.stop()reactor.connectTCP(HOST,PORT,TSClntFactory())reactor.run()
一样报有PROTOCOL模块的相关错误:求大神指教!!!!!!!!!!!!!!!!!!
相关文章推荐
- nodejs中tcp服务器的搭建和客户端通信的实现
- linux环境下搭建一个基于tcp的客户端和服务器
- 大三软件工程小项目-小技术集合-tcp服务器搭建及客户端
- 系统编程之网络编程(TCP客户端与服务器的搭建)
- 基于TCP的服务器与客户端的搭建
- 学习TCP/IP客户端服务器的搭建
- xmpp客户端,服务器搭建要点
- Socket与http、tcp客户端与服务器连接的区别!
- Git 服务器搭建与客户端安装
- Redis服务器搭建/配置/及Jedis客户端的使用方法
- 基于TCP网络通信的自动升级程序源码分析-客户端请求服务器上的升级信息
- ubuntu中svn简明用法:服务器搭建+客户端使用
- twisted 学习笔记二:创建一个简单TCP客户端
- Azure搭建SVN服务器及客户端简介
- Linux-Rsync服务器/客户端搭建实战
- 基于tcp或者UDP socket 情况下服务器客户端并发操作
- Redis服务器搭建/配置/及Jedis客户端的使用方法
- TCP传输,客户端和服务器通信
- Android TCP 文件客户端与服务器DEMO
- C#利用TcpListener和TcpClient类实现服务器和客户端的通信