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 相关文章推荐
django开发之settings.py中变量的全局引用详解
Mar 29 Python
python reverse反转部分数组的实例
Dec 13 Python
对django 模型 unique together的示例讲解
Aug 06 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Python产生一个数值范围内的不重复的随机数的实现方法
Aug 21 Python
Pytorch之parameters的使用
Dec 31 Python
python如何实现DES加密
Sep 21 Python
python 实现socket服务端并发的四种方式
Dec 14 Python
python 实现IP子网计算
Feb 18 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 Python
Python Django获取URL中的数据详解
Nov 01 Python
关于Python使用turtle库画任意图的问题
Apr 01 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的微信公众平台开发入门实例
2015/04/15 PHP
JavaScript入门教程(8) Location地址对象
2009/01/31 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
2011/06/27 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript中判断json的方法总结
2015/08/27 Javascript
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
Javascript将双字节字符转换成单字节字符并计算长度
2016/06/22 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
解决IE7中使用jQuery动态操作name问题
2017/08/28 jQuery
Vue + Vue-router 同名路由切换数据不更新的方法
2017/11/20 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
vue-cli打包后本地运行dist文件中的index.html操作
2020/08/12 Javascript
vue 导航守卫和axios拦截器有哪些区别
2020/12/19 Vue.js
[43:33]EG vs Spirit Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
用于统计项目中代码总行数的Python脚本分享
2015/04/21 Python
Python字符串切片操作知识详解
2016/03/28 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Django添加favicon.ico图标的示例代码
2018/08/07 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
python简单的三元一次方程求解实例
2020/04/02 Python
Python3将ipa包中的文件按大小排序
2020/04/17 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
手把手教你如何用Pycharm2020.1.1配置远程连接的详细步骤
2020/08/07 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
国外平面设计素材网站:The Hungry JPEG
2017/03/28 全球购物
反洗钱宣传活动总结
2014/08/26 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
离职告别感言
2015/08/04 职场文书
CSS font-variation 可变字体的魅力(实例详解)
2022/03/03 HTML / CSS
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL