国产探花免费观看_亚洲丰满少妇自慰呻吟_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是在連接關閉的時候被調用,兩個是有區別的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滨州市| 涟水县| 仲巴县| 建昌县| 吉水县| 仁布县| 阜阳市| 绥中县| 荥阳市| 麻阳| 霍林郭勒市| 黄平县| 荔波县| 达孜县| 皋兰县| 中西区| 贵港市| 鸡东县| 酉阳| 双流县| 永济市| 南部县| 古田县| 名山县| 科技| 衡阳市| 定边县| 巴马| 晋州市| 密云县| 隆子县| 静宁县| 关岭| 基隆市| 岑溪市| 成武县| 雷波县| 乐亭县| 乌拉特后旗| 德化县| 开封市|