zoukankan      html  css  js  c++  java
  • Twisted网络库编程实例

    于这一周看了python的第三方网络库Twisted,英文看的头比较大,想看英文的话点击这里。如果英文很烂,可以看中文,这里。总的来说我了解到的主要包括以下三个东东:Factory。protocol和Transport。这三个东西是什么呢:这三个东西都是Twisted写好的东西,可能你在阅读源码的时候发现,里面有很多没有实现的方法,没关系,这些是有你自己来实现的,只要你写的类继承上述三个就可以对没有实现的方法重写了。这个网络框架整体的来说,不算太难,只要弄懂就OK了。

    1. Factory:字面意思就是工厂,他主要是用来制作协议的
    2. Protocol:这里面主要是用来实现协议的及内容的。
    3. Transport:主要是用来发送和接收网络数据的功能。

    下面来看一下一个Server实例假声一下理解:

     1 #coding='utf-8'
     2 from twisted.protocols.basic import LineReceiver
     3 from twisted.internet import reactor
     4 from twisted.internet.protocol import Factory
     5 
     6 class Chat(LineReceiver):#继承与protocol
     7     def __init__(self,users):
     8         self.users=users
     9         self.name=None
    10         self.state="GETNAME"
    11         
    12     def connectionMade(self):
    13         self.sendLine("what`s your name?")
    14         
    15         
    16     def connectionLost(self, reason):
    17         if self.name in self.users:
    18             del self.users[self.name]
    19             
    20     def lineReceived(self, line):
    21         print self.state
    22         if self.state =="GETNAME":
    23             print line
    24             self.handle_GETNAME(line)
    25         else:
    26             self.handle_CHAT(line)
    27             
    28         print line
    29             
    30     def handle_GETNAME(self,name):
    31         print name
    32         if name  in self.users:
    33             self.sendLine("Name taken, please chose another!")
    34             return 
    35         self.sendLine("welcome %s"%(name))
    36         self.name=name
    37         self.users[name]=self
    38         self.state="CHAT"
    39         
    40     def handle_CHAT(self,message):
    41         message="<%s> %s"%(self.name,message)
    42         for name,protocol in self.users.iteritems():
    43             if protocol != self:
    44                 protocol.sendLine(message) 
    45             
    46 
    47 class ChatFectory(Factory):#继承与Factory`
    48     def __init__(self):
    49         self.users={}
    50         
    51     def buildProtocol(self, addr):
    52         return Chat(self.users)
    53 
    54 reactor.listenTCP(8123,ChatFectory())
    55 reactor.run()

    变异的时候可能会由于编码问题导致失败,用户可以将第一行的编码方式改一下就ok了:

    #-*- coding:utf-8 -*-
    

      是不是编译过了,但是会不会有疑问呢:什么都没有,怎么看运行过程?没关系,下面打开你的电脑,使用win自带的telnet工具进行连接就OK了。记住端口要一直哦。

    打开CMD窗口输入:

    telnet127.0.0.1 8123
    

      进入可以看到她和你说了一句:你叫什么名字?你输入你的名字后,他会说一句欢迎你

    作者:first_semon
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题,欢迎交流
  • 相关阅读:
    Java 8 不收费版本及下载
    java 文档注释 -- javadoc 标签
    Java中的基本数据类型int及数据溢出
    Excel处理数据的方法记录
    Vue显示favicon.icon的方法
    Xshell之复制粘贴快捷键
    FTP客户端软件介绍
    netstat命令详解
    Flutter之摇一摇功能的实现
    Flutter之扫描二维码功能的实现
  • 原文地址:https://www.cnblogs.com/first-semon/p/8584035.html
Copyright © 2011-2022 走看看