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 相关文章推荐
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
Apr 13 Python
Python实现的求解最小公倍数算法示例
May 03 Python
解决python nohup linux 后台运行输出的问题
May 11 Python
Python实现统计给定字符串中重复模式最高子串功能示例
May 16 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
详解python opencv、scikit-image和PIL图像处理库比较
Dec 26 Python
django迁移文件migrations的实现
Mar 31 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
Jul 09 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
Numpy ndarray 多维数组对象的使用
Feb 10 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
解析dedecms空间迁移步骤详解
2013/05/15 PHP
php post换行的方法
2020/02/03 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
学习ExtJS fit布局使用说明
2009/10/08 Javascript
JavaScript计算字符串中每个字符出现次数的小例子
2013/07/02 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
JS前端加密算法示例
2016/12/22 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
python中实现k-means聚类算法详解
2017/11/11 Python
Tornado 多进程实现分析详解
2018/01/12 Python
python实现判断一个字符串是否是合法IP地址的示例
2018/06/04 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
Python 如何批量更新已安装的库
2020/05/26 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
移动端html5 meta标签的神奇功效
2016/01/06 HTML / CSS
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
介绍一下内联、左联、右联
2013/12/31 面试题
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
医药代表个人求职信范本
2013/12/19 职场文书
科技活动周标语
2014/10/08 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技