python如何通过twisted搭建socket服务


Posted in Python onFebruary 03, 2020

这篇文章主要介绍了python如何通过twisted搭建socket服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

服务端

# -*- coding: utf-8 -*-
# @Time : 2018/9/19 21:41
# @Author : cxa
# @File : tsTservTW.py
# @Software: PyCharm
'''
Twisted Reactor时间戳TCP服务器
'''
from twisted.internet import protocol, reactor
from time import ctime
import msgpack

PORT = 21567


class TSServProtocol(protocol.Protocol):
  def connectionMade(self):
    '''
    当客户端连接的时候会执行该方法
    :return:
    '''
    clnt = self.clnt = self.transport.getPeer().host
    print(f"...来自的{clnt}链接:")

  def dataReceived(self, data):
    '''
    接收到客户端的数据
    :param data:
    :return:
    '''
    print(f"来自客户端:{msgpack.unpackb(data,encoding='utf')}")
    data = f"{ctime()}:来自服务器:你好"
    self.transport.write(msgpack.packb(data))


if __name__ == '__main__':
  # 创建一个协议工厂,之所以称之为工厂是因为,每次得到一个
  # 接入连接时,都能"制造"协议的一个实例。
  factory = protocol.Factory()

  factory.protocol = TSServProtocol
  print("....等待链接..")
  # 使用reactor安装一个TCP监听器,检查服务请求。
  # 当它接收到一个请求时,就会创建一个TSServProtocol实例来处理那个客户端的事务。
  reactor.listenTCP(PORT, factory)
  reactor.run()

客户端

# -*- coding: utf-8 -*-
# @Time : 2018/9/19 21:57
# @Author : cxa
# @File : tsTclntTW.py
# @Software: PyCharm
'''
创建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'...发送数据 {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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中ConfigParse模块的用法
Sep 29 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
python实现获取Ip归属地等信息
Aug 27 Python
python获取外网IP并发邮件的实现方法
Oct 01 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
Nov 23 Python
Python闭包函数定义与用法分析
Jul 20 Python
Python利用递归实现文件的复制方法
Oct 27 Python
pygame游戏之旅 按钮上添加文字的方法
Nov 21 Python
python学习开发mock接口
Apr 28 Python
Python环境配置实现pip加速过程解析
Nov 27 Python
关于Tensorflow分布式并行策略
Feb 03 #Python
基于python修改srt字幕的时间轴
Feb 03 #Python
Python实现不规则图形填充的思路
Feb 02 #Python
Python ORM编程基础示例
Feb 02 #Python
Python 面向对象之类class和对象基本用法示例
Feb 02 #Python
flask 框架操作MySQL数据库简单示例
Feb 02 #Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 #Python
You might like
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
2019/06/14 PHP
用按钮控制iframe显示的网页实现方法
2013/02/04 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
详解js的六大数据类型
2016/12/27 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
微信小程序图片自适应实现解析
2020/01/21 Javascript
详解datagrid使用方法(重要)
2020/11/06 Javascript
[50:21]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/19 DOTA
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
python文件写入实例分析
2015/04/08 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
Python线程下使用锁的技巧分享
2018/09/13 Python
python两个_多个字典合并相加的实例代码
2019/12/26 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Matplotlib配色之Colormap详解
2021/01/05 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
关于HTML5你必须知道的28个新特性,新技巧以及新技术
2012/05/28 HTML / CSS
影视制作岗位职责
2013/12/04 职场文书
工厂会计员职责
2014/02/06 职场文书
开工仪式主持词
2014/03/20 职场文书
保密协议书范本
2014/04/22 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
助学贷款贫困证明
2014/09/23 职场文书
医生个人年终总结
2015/02/28 职场文书
研究生给导师的自荐信
2015/03/06 职场文书
公司的力量观后感
2015/06/05 职场文书
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB