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操作xml文件示例
Apr 07 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
Python解析命令行读取参数之argparse模块
Jul 26 Python
python实现高斯判别分析算法的例子
Dec 09 Python
Python timer定时器两种常用方法解析
Jan 20 Python
python获取命令行参数实例方法讲解
Nov 02 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Python中time标准库的使用教程
Apr 13 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命令行使用方法和命令行参数说明
2014/04/08 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
jQuery Ajax中的事件详细介绍
2015/04/16 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
解决vue2 在mounted函数无法获取prop中的变量问题
2018/11/15 Javascript
浅谈JavaScript中this的指向更改
2020/07/28 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
python 不关闭控制台的实现方法
2011/10/23 Python
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
Python json 错误xx is not JSON serializable解决办法
2017/03/15 Python
Python中with及contextlib的用法详解
2017/06/08 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
5个很好的Python面试题问题答案及分析
2018/01/19 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
css3学习心得分享
2013/08/19 HTML / CSS
用HTML5 Canvas API中的clearRect()方法实现橡皮擦功能
2016/03/15 HTML / CSS
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
应届毕业生求职信范例分享
2013/12/17 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
横空出世观后感
2015/06/09 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书