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使用在线API查询IP对应的地理位置信息实例
Jun 01 Python
python修改注册表终止360进程实例
Oct 13 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Python实现模拟浏览器请求及会话保持操作示例
Jul 30 Python
python tools实现视频的每一帧提取并保存
Mar 20 Python
解决pytorch GPU 计算过程中出现内存耗尽的问题
Aug 19 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
python 实现单例模式的5种方法
Sep 23 Python
python实现商品进销存管理系统
May 30 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
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
javascript背投广告代码的完善
2008/04/08 Javascript
jquery在Chrome下获取图片的长宽问题解决
2013/03/20 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
深入理解JavaScript中的对象
2015/06/04 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
django框架自定义模板标签(template tag)操作示例
2019/06/24 Python
DJANGO-URL反向解析REVERSE实例讲解
2019/10/25 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
如何通过命令行进入python
2020/07/06 Python
酒店人事专员岗位职责
2013/12/19 职场文书
退伍老兵事迹材料
2014/01/31 职场文书
运动会的口号
2014/06/09 职场文书
爱牙日活动总结
2014/08/29 职场文书
无罪辩护词范文
2015/05/21 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
公司周年庆寄语
2019/06/21 职场文书
如何理解python接口自动化之logging日志模块
2021/06/15 Python
使用redis生成唯一编号及原理示例详解
2021/09/15 Redis
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android