手机
当前位置:查字典教程网 >电脑 >服务器_操作系统教程 >Python开发:关于twisted 的python 网络编程
Python开发:关于twisted 的python 网络编程
摘要:  我不擅长写socket代码。一是用c写起来比较麻烦,二是自己平时也没有这方面的需求。等到自己真正想了解的时候,才发现自己在这方面确实有需...

  我不擅长写socket代码。一是用c写起来比较麻烦,二是自己平时也没有这方面的需求。等到自己真正想了解的时候,才发现自己在这方面确实有需要改进的地方。最近由于项目的原因需要写一些python代码,才发现在python下面开发socket是一件多么爽的事情。

  对于大多数socket来说,用户其实只要关注三个事件就可以了。这分别是创建、删除、和收发数据。python中的twisted库正好可以帮助我们完成这么一个目标,实用起来也不麻烦。下面的代码来自twistedmatrix网站,我觉得挺不错的,贴在这里和大家分享一下。如果需要测试的话,直接telnet localhost 8123就可以了。

 

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
from twisted.internet.protocolimportFactory
from twisted.protocols.basicimportLineReceiver
from twisted.internetimportreactor
 
classChat(LineReceiver):
 
    def __init__(self, users):
        self.users = users
        self.name = None
        self.state ="GETNAME"
 
    def connectionMade(self):
        self.sendLine("What's your name?")
 
    def connectionLost(self, reason):
        ifself.name in self.users:
            del self.users[self.name]
 
    def lineReceived(self, line):
        ifself.state =="GETNAME":
            self.handle_GETNAME(line)
        else:
            self.handle_CHAT(line)
 
    def handle_GETNAME(self, name):
        ifname in self.users:
            self.sendLine("Name taken, please choose another.")
            return
        self.sendLine("Welcome, %s!"% (name,))
        self.name = name
        self.users[name] = self
        self.state ="CHAT"
 
    def handle_CHAT(self, message):
        message ="<%s> %s"% (self.name, message)
        forname, protocol in self.users.iteritems():
            ifprotocol != self:
                protocol.sendLine(message)
 
classChatFactory(Factory):
 
    def __init__(self):
        self.users = {} # maps user names to Chat instances
 
    def buildProtocol(self, addr):
        returnChat(self.users)
 
reactor.listenTCP(8123, ChatFactory())
reactor.run()

 socket (计算机专业术语)

  网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

  Socket的英文原义是“孔”或“插座”。作为BSD UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

【Python开发:关于twisted 的python 网络编程】相关文章:

Linux系统如何关闭scp和sftp命令

讲解Linux中的重命名命令rename的使用方法

Linux通过shell脚本创建SVN版本库简化创建过程

CentOS下如何删除或重命名乱码文件?

苹果笔记本电脑IP地址设置方法

在Linux上优化Mysql运行环境让你对Mysql更多了解

Linux中为什么硬链接不能指向目录

linux系统教程:建立ARM交叉编译环境步骤详解

CMD命令大全(一)

在Linux下使用avconv进行屏幕录像的教程

精品推荐
分类导航