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二叉树的实现实例
Nov 21 Python
python实现用户答题功能
Jan 17 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
python判断完全平方数的方法
Nov 13 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
Python使用qrcode二维码库生成二维码方法详解
Feb 17 Python
使用python采集Excel表中某一格数据
May 14 Python
基于python实现音乐播放器代码实例
Jul 01 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
pycharm 关闭search everywhere的解决操作
Jan 15 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
Python基础教程,Python入门教程(超详细)
Jun 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
服务器web工具 php环境下
2010/12/29 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
JS实现简单的天数计算器完整实例
2017/04/28 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
Node爬取大批量文件的方法示例
2019/06/28 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
[01:17]Ti4 循环赛第一日回顾
2014/07/11 DOTA
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
python进行参数传递的方法
2020/05/12 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
自荐书4要点
2014/01/25 职场文书
青年文明号汇报材料
2014/12/23 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
党支部审查意见
2015/06/02 职场文书
MySQL数据库事务的四大特性
2022/04/20 MySQL
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电