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上基于Markov链生成伪随机文本的教程
Apr 17 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python set集合使用方法解析
Nov 05 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
Python爬虫解析网页的4种方式实例及原理解析
Dec 30 Python
python 实现字符串下标的输出功能
Feb 13 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
Jul 02 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Python3读写ini配置文件的示例
Nov 06 Python
python实现简易名片管理系统
Apr 11 Python
使用Python开发冰球小游戏
Apr 30 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制作静态网站的模板框架(四)
2006/10/09 PHP
用php实现批量查询清除一句话后门的代码
2008/01/20 PHP
php入门学习知识点一 PHP与MYSql连接与查询
2011/07/14 PHP
深入分析PHP引用(&)
2014/09/04 PHP
php随机抽奖实例分析
2015/03/04 PHP
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JavaScript弹窗基础篇
2016/04/27 Javascript
详解jQuery lazyload 懒加载
2016/12/19 Javascript
react实现换肤功能的示例代码
2018/08/14 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
使用layer.msg 时间设置不起作用的解决方法
2019/09/12 Javascript
python实现文件快照加密保护的方法
2015/06/30 Python
python批量查询、汉字去重处理CSV文件
2018/05/31 Python
wxPython的安装与使用教程
2018/08/31 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python爬虫定时计划任务的几种常见方法(推荐)
2021/01/15 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
德国柯吉澳趣味家居:Koziol
2017/08/24 全球购物
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
新闻学专业应届生求职信
2013/11/08 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
2015入党自传书范文
2015/06/26 职场文书
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js
Go 内联优化让程序员爱不释手
2022/06/21 Golang
Java使用HttpClient实现文件下载
2022/08/14 Java/Android