python网络编程:socketserver的基本使用方法实例分析


Posted in Python onApril 09, 2020

本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下:

本文内容:

  • socketserver的介绍
  • socketserver的使用
  • socketserver的异步服务端

首发时间:2018-03-21


也可以使用socketserver来创建socket


socketserver的介绍:

  • socketserver是标准库中的一个高级模块
  • socketserver可以简化创建客户端跟创建服务端的代码

socketserver的使用:

  • 首先导入模块:import socketserver
  • 初始化控制器类Handler【Handler是一个继承BaseRequestHandler的类Handler中的handle方法决定了每一个连接过来的操作】 【控制器类的类名可以是其他的,不一定是Handler,只要继承了BaseRequestHandler就行】
    • init():初始化控制设置,初始化连接套接字,地址,处理实例等信息
    • handle(): 定义了如何处理每一个连接。
    • setup(): 在handle()之前执行.一般用作设置默认之外的连接配置
    • finish():在handle()之后执行。
    • 变量:
      • self.request属性是套接字对象,所以使用self.request.xxxx调用套接字的函数
      • self.server包含调用处理程序的实例
      • self.client_address是客户端地址信息
  • 定义服务端类型【将Handler类和服务端的地址端口参数传入】:
    • TCPServer 支持ipv4的TCP协议的服务器。
      • server=socketserver.TCPServer((HOST,PORT),Handler)【Handler】
    • UDPServer 支持ipv4的UDP协议的服务器。
      • server=socketserver.UDPServer((HOST,PORT),Handler)
  • 运行服务端
    • 持续循环运行:serve_forever(),即使一个连接报错了,但不会导致程序停止,而是会持续运行,与其他客户端通信
      • server.serve_forever()
      • python网络编程:socketserver的基本使用方法实例分析
    • 停止server_forever:shutdown()
      • server.shutdown()

服务端:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
 def handle(self):
  try:
   while True:
    self.data=self.request.recv(1024)
    print("{} send:".format(self.client_address),self.data)
    if not self.data:
     print("connection lost")
     break
    self.request.sendall(self.data.upper())
  except Exception as e:
   print(self.client_address,"连接断开")
  finally:
   self.request.close()
 def setup(self):
  print("before handle,连接建立:",self.client_address)
 def finish(self):
  print("finish run after handle")

if __name__=="__main__":
 HOST,PORT = "localhost",9999
 server=socketserver.TCPServer((HOST,PORT),MyTCPHandler)

 server.serve_forever()

客户端:

import socket

client=socket.socket()

client.connect(('localhost',9999))
while True:
 cmd=input("(quit退出)>>").strip()
 if len(cmd)==0:
  continue
 if cmd=="quit":
  break
 client.send(cmd.encode())
 cmd_res=client.recv(1024)
 print(cmd_res.decode())

client.close()

socketserver的异步服务端:

多线程:ThreadingTCPServer

多进程:ForkingTCPServer(Unix)

多线程版:

import socketserver

class MyTCPHandler(socketserver.BaseRequestHandler):
 def handle(self):
  try:
   while True:
    self.data=self.request.recv(1024)
    print("{} send:".format(self.client_address),self.data)
    if not self.data:
     print("connection lost")
     break
    self.request.sendall(self.data.upper())
  except Exception as e:
   print(self.client_address,"连接断开")
  finally:
   self.request.close()
 def setup(self):
  print("before handle,连接建立:",self.client_address)
 def finish(self):
  print("finish run after handle")


HOST,PORT = "localhost",9999

server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#多线程版
server.serve_forever()

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中利用zfill方法自动给数字前面补0
Apr 10 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
浅析Python与Mongodb数据库之间的操作方法
Jul 01 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
Python将视频或者动态图gif逐帧保存为图片的方法
Sep 10 Python
PyTorch实现更新部分网络,其他不更新
Dec 31 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
如何利用python 读取配置文件
Jan 06 Python
python中的getter与setter你了解吗
Mar 24 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 #Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 #Python
python实现处理mysql结果输出方式
Apr 09 #Python
python读取配置文件方式(ini、yaml、xml)
Apr 09 #Python
python数据分析工具之 matplotlib详解
Apr 09 #Python
使用python检查yaml配置文件是否符合要求
Apr 09 #Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 #Python
You might like
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
2013/10/11 Javascript
js Date概念详细介绍
2013/11/22 Javascript
js 获取浏览器版本以此来调整CSS的样式
2014/06/03 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
js闭包的用途详解
2014/11/09 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
jQuery 实现DOM元素拖拽交换位置的实例代码
2020/07/14 jQuery
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Fabric 应用案例
2016/08/28 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python3中函数参数的四种简单用法
2018/07/09 Python
Python lambda表达式用法实例分析
2018/12/25 Python
python设计tcp数据包协议类的例子
2019/07/23 Python
python保留小数位的三种实现方法
2020/01/07 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
C#软件工程师英语面试题
2015/06/07 面试题
教师自荐书
2013/10/08 职场文书
大学生最常用的自我评价
2013/12/07 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
公司酒会致辞
2015/07/30 职场文书
2016年党员岗位承诺书
2016/03/24 职场文书