zoukankan      html  css  js  c++  java
  • 0X04-Twisted Teactor TCP Server

    Twisted Teactor TCP Server

    #! /usr/bin/env python
    from twisted.internet import protocol,reactor
    from time import ctime
    '''
    这是一个时间戳TCP服务器,它使用了Twisted Internet类
    Twisted是用Python实现的基于事件驱动的网络引擎框架:https://www.cnblogs.com/silence-cho/p/9898984.html
    '''
    PORT = 21567
    '''
    1;reactor是twisted异步框架中的核心组件,是一个基于select,poll或epoll的事件循环,其监听socket的状态,当socket状态有变化时(有新的连接请求,或接受到数据等)时,调用相应的组件来进行处理。
    2;Factory: 主要用来创建protocol,也可以定义其他操作
    3;Protocol:主要用来处理连接建立和断开时的操作,以及数据的接受和发送操作
    
    '''
    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(data)
    
    factory = protocol.Factory()
    factory.protocol = TSServProtocol
    print('waiting for connection...')
    reactor.listenTCP(PORT,factory)
    reactor.run()
    
    '''
    英语翻译:
        1;protocol 协议
        2;reactor 反应器
    '''

    Twisted Teactor TCP Client

    #! /usr/bin/env python
    from twisted.internet import protocol,reactor
    
    HOST = 'localhost'
    PORT = 21567
    
    class TSClntProtocol(protocol.Protocol):
        def sendData(self):
            data = 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(property.ClientFactory):
        protocol = TSClntProtocol
        clientConnectionLost = clientConnectionFailed = lambda self ,connector,reason:reactor.stop()
    
    reactor.connectTcp(HOST,PORT,TSClntFactory())
    reactor.run()
  • 相关阅读:
    【转】团队管理
    Oracle 11g中关于数据定义的思考
    【转】InfoQ的Java安全认证机制
    Oracle 11g windows简体中文版安装指南
    【转】InfoQ的集成Java内容仓库和Spring
    Oracle数据库常用操作命令(一)
    常用DQL
    如何处理Oracle客户端查询乱码问题
    Documentum中的TCS与对应权限设置
    【转】Windows系统下的Apache性能优化mpm
  • 原文地址:https://www.cnblogs.com/aaron456-rgv/p/12509661.html
Copyright © 2011-2022 走看看