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 Matplotlib库入门指南
May 18 Python
Python的socket模块源码中的一些实现要点分析
Jun 06 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
不管你的Python报什么错,用这个模块就能正常运行
Sep 14 Python
关于python多重赋值的小问题
Apr 17 Python
关于Numpy数据类型对象(dtype)使用详解
Nov 27 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 Python
matplotlib相关系统目录获取方式小结
Feb 03 Python
Python中字符串对象语法分享
Feb 24 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脚本的10个技巧(8)
2006/10/09 PHP
PHP的面试题集
2006/11/19 PHP
thinkphp3.2实现上传图片的控制器方法
2016/04/28 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
ES6学习笔记之map、set与数组、对象的对比
2018/03/01 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
nodejs高大上的部署方式(PM2)
2018/09/11 NodeJs
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
ES6使用 Array.includes 处理多重条件用法实例分析
2020/03/02 Javascript
vue常用高阶函数及综合实例
2021/02/25 Vue.js
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Python性能优化的20条建议
2014/10/25 Python
使用SAE部署Python运行环境的教程
2015/05/05 Python
浅析Python的web.py框架中url的设定方法
2016/07/11 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
详解爬虫被封的问题
2019/04/23 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
python中封包建立过程实例
2021/02/18 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
优秀毕业生自荐信
2014/06/10 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
简易离婚协议书范本
2014/10/24 职场文书
庭外和解协议书
2016/03/23 职场文书
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers