zoukankan      html  css  js  c++  java
  • python使用twisted搭建的一个socket服务

    服务端

    # -*- coding: utf-8 -*-
    # @Time : 2018/9/19 21:41
    # @Author : cxa
    # @File : tsTservTW.py
    # @Software: PyCharm
    '''
    Twisted Reactor时间戳TCP服务器
    '''
    from twisted.internet import protocol, reactor
    from time import ctime
    import msgpack
    
    PORT = 21567
    
    
    class TSServProtocol(protocol.Protocol):
        def connectionMade(self):
            '''
            当客户端连接的时候会执行该方法
            :return:
            '''
            clnt = self.clnt = self.transport.getPeer().host
            print(f"...来自的{clnt}链接:")
    
        def dataReceived(self, data):
            '''
            接收到客户端的数据
            :param data:
            :return:
            '''
            print(f"来自客户端:{msgpack.unpackb(data,encoding='utf')}")
            data = f"{ctime()}:来自服务器:你好"
            self.transport.write(msgpack.packb(data))
    
    
    if __name__ == '__main__':
        # 创建一个协议工厂,之所以称之为工厂是因为,每次得到一个
        # 接入连接时,都能"制造"协议的一个实例。
        factory = protocol.Factory()
    
        factory.protocol = TSServProtocol
        print("....等待链接..")
        # 使用reactor安装一个TCP监听器,检查服务请求。
        # 当它接收到一个请求时,就会创建一个TSServProtocol实例来处理那个客户端的事务。
        reactor.listenTCP(PORT, factory)
        reactor.run()
    
    

    客户端

    # -*- coding: utf-8 -*-
    # @Time : 2018/9/19 21:57
    # @Author : cxa
    # @File : tsTclntTW.py
    # @Software: PyCharm
    '''
    创建Twisted Reactor TCP客户端
    '''
    from twisted.internet import protocol, reactor
    import msgpack
    
    HOST = 'localhost'
    PORT = 21567
    
    
    class TSClntProtocol(protocol.Protocol):
        def sendData(self):
            data = input('>')
            if data:
                print(f'...发送数据 {data}')
                self.transport.write(msgpack.packb(data))
            else:
                self.transport.loseConnection()
    
        def connectionMade(self):
            self.sendData()
    
        def dataReceived(self, data):
            print(msgpack.unpackb(data, encoding="utf8"))
            self.sendData()
    
    
    class TSClntFactory(protocol.ClientFactory):
        protocol = TSClntProtocol
        clientConnctionLost = clientConnctionFailed = lambda self, connector, reason: reactor.stop()
    
    
    if __name__ == '__main__':
        reactor.connectTCP(HOST, PORT, TSClntFactory())
        reactor.run()
    
    
  • 相关阅读:
    sass08 if while for each
    sass07 函数
    sass06 mixin
    sass05 数据类型,数据运算
    sass04 嵌套、继承、占位符
    批量导出docker images 的一个简单方法
    ARM 版本 瀚高 数据库的启动命令
    PHPStorm+Wamp+Xdebug+Windows7调试代码
    在Windows Server 2012 中安装 .NET 3.5 Framework
    Windows Server 2012 GUI与Core的切换
  • 原文地址:https://www.cnblogs.com/c-x-a/p/9678315.html
Copyright © 2011-2022 走看看