溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python如何通過twisted搭建socket服務(wù)

發(fā)布時(shí)間:2020-08-23 18:47:02 來源:腳本之家 閱讀:159 作者:一起來學(xué)python 欄目:開發(fā)技術(shù)

這篇文章主要介紹了python如何通過twisted搭建socket服務(wù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

服務(wù)端

# -*- coding: utf-8 -*-
# @Time : 2018/9/19 21:41
# @Author : cxa
# @File : tsTservTW.py
# @Software: PyCharm
'''
Twisted Reactor時(shí)間戳TCP服務(wù)器
'''
from twisted.internet import protocol, reactor
from time import ctime
import msgpack

PORT = 21567


class TSServProtocol(protocol.Protocol):
  def connectionMade(self):
    '''
    當(dāng)客戶端連接的時(shí)候會(huì)執(zhí)行該方法
    :return:
    '''
    clnt = self.clnt = self.transport.getPeer().host
    print(f"...來自的{clnt}鏈接:")

  def dataReceived(self, data):
    '''
    接收到客戶端的數(shù)據(jù)
    :param data:
    :return:
    '''
    print(f"來自客戶端:{msgpack.unpackb(data,encoding='utf')}")
    data = f"{ctime()}:來自服務(wù)器:你好"
    self.transport.write(msgpack.packb(data))


if __name__ == '__main__':
  # 創(chuàng)建一個(gè)協(xié)議工廠,之所以稱之為工廠是因?yàn)椋看蔚玫揭粋€(gè)
  # 接入連接時(shí),都能"制造"協(xié)議的一個(gè)實(shí)例。
  factory = protocol.Factory()

  factory.protocol = TSServProtocol
  print("....等待鏈接..")
  # 使用reactor安裝一個(gè)TCP監(jiān)聽器,檢查服務(wù)請(qǐng)求。
  # 當(dāng)它接收到一個(gè)請(qǐng)求時(shí),就會(huì)創(chuàng)建一個(gè)TSServProtocol實(shí)例來處理那個(gè)客戶端的事務(wù)。
  reactor.listenTCP(PORT, factory)
  reactor.run()

客戶端

# -*- coding: utf-8 -*-
# @Time : 2018/9/19 21:57
# @Author : cxa
# @File : tsTclntTW.py
# @Software: PyCharm
'''
創(chuàng)建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'...發(fā)送數(shù)據(jù) {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()

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI