国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

使用Python的Twisted框架編寫簡單的網絡客戶端

2020-02-23 00:45:16
字體:
來源:轉載
供稿:網友

Protocol
  和服務器一樣,也是通過該類來實現。先看一個簡短的例程:

from twisted.internet.protocol import Protocolfrom sys import stdoutclass Echo(Protocol):  def dataReceived(self, data):    stdout.write(data)

在本程序中,只是簡單的將獲得的數據輸出到標準輸出中來顯示,還有很多其他的事件沒有作出任何響應,下面
有一個回應其他事件的例子:

from twisted.internet.protocol import Protocolclass WelcomeMessage(Protocol):  def connectionMade(self):    self.transport.write("Hello server, I am the client!/r/n")    self.transport.loseConnection()

本協議連接到服務器,發送了一個問候消息,然后關閉了連接。
connectionMade事件通常被用在建立連接的事件發生時觸發。關閉連接的時候會觸發connectionLost事件函數

(Simple, single-use clients)簡單的單用戶客戶端
  在許多情況下,protocol僅僅是需要連接服務器一次,并且代碼僅僅是要獲得一個protocol連接的實例。在
這樣的情況下,twisted.internet.protocol.ClientCreator提供了一個恰當的API

from twisted.internet import reactorfrom twisted.internet.protocol import Protocol, ClientCreatorclass Greeter(Protocol):  def sendMessage(self, msg):    self.transport.write("MESSAGE %s/n" % msg)def gotProtocol(p):  p.sendMessage("Hello")  reactor.callLater(1, p.sendMessage, "This is sent in a second")  reactor.callLater(2, p.transport.loseConnection)c = ClientCreator(reactor, Greeter)c.connectTCP("localhost", 1234).addCallback(gotProtocol)


ClientFactory(客戶工廠)
  ClientFactory負責創建Protocol,并且返回相關事件的連接狀態。這樣就允許它去做像連接發生錯誤然后
重新連接的事情。這里有一個ClientFactory的簡單例子使用Echo協議并且打印當前的連接狀態

from twisted.internet.protocol import Protocol, ClientFactoryfrom sys import stdoutclass Echo(Protocol):  def dataReceived(self, data):    stdout.write(data)class EchoClientFactory(ClientFactory):  def startedConnecting(self, connector):    print 'Started to connect.'    def buildProtocol(self, addr):    print 'Connected.'    return Echo()    def clientConnectionLost(self, connector, reason):    print 'Lost connection. Reason:', reason    def clientConnectionFailed(self, connector, reason):    print 'Connection failed. Reason:', reason

要想將EchoClientFactory連接到服務器,可以使用下面代碼:

from twisted.internet import reactorreactor.connectTCP(host, port, EchoClientFactory())reactor.run()

注意:clientConnectionFailed是在Connection不能被建立的時候調用,clientConnectionLost是在連接關閉的時候被調用,兩個是有區別的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海晏县| 天台县| 定边县| 镇坪县| 吉水县| 大足县| 辽阳县| 汉中市| 利辛县| 克什克腾旗| 嫩江县| 铜梁县| 会同县| 黔江区| 庆阳市| 卓资县| 辛集市| 柏乡县| 井陉县| 乐东| 万源市| 黎川县| 左权县| 隆化县| 山东省| 贵阳市| 视频| 东阿县| 日喀则市| 上栗县| 改则县| 额济纳旗| 绥德县| 兴山县| 胶南市| 新闻| 惠州市| 靖远县| 淮安市| 浦城县| 合川市|