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中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
Python中创建字典的几种方法总结(推荐)
Apr 27 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
使用python 3实现发送邮件功能
Jun 15 Python
深入理解Django自定义信号(signals)
Oct 15 Python
Python求两个圆的交点坐标或三个圆的交点坐标方法
Nov 07 Python
python 与服务器的共享文件夹交互方法
Dec 27 Python
浅谈python之高阶函数和匿名函数
Mar 21 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
python实现在线翻译
Jun 18 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
SONY ICF-SW7600的电路分析
2021/03/02 无线电
PHP中source #N问题的解决方法
2014/01/27 PHP
PHP内核探索:哈希表碰撞攻击原理
2015/07/31 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
jquery实现tr元素的上下移动示例代码
2013/12/20 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
jquery使用EasyUI Tree异步加载JSON数据(生成树)
2017/02/11 Javascript
JS高仿抛物线加入购物车特效实现代码
2017/02/20 Javascript
Redux 和 Mobx的选择问题:让你不再困惑!
2017/09/18 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
代码详解javascript模块加载器
2018/03/04 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
Python中字符串与编码示例代码
2019/05/20 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python梯度下降算法的实现
2020/02/24 Python
python实现俄罗斯方块小游戏
2020/04/24 Python
一篇文章带你学习CSS3图片边框
2020/11/04 HTML / CSS
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
法国二手MacBook销售网站:Okamac
2019/03/18 全球购物
大学新学期计划书
2014/04/28 职场文书
市级三好学生评语
2014/12/29 职场文书
2015年党风廉政承诺书
2015/01/22 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Java移除无效括号的方法实现
2021/08/07 Java/Android
我的收音机情缘
2022/04/05 无线电