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 django 访问静态文件出现404或500错误
Jan 20 Python
答题辅助python代码实现
Jan 16 Python
python模块之paramiko实例代码
Jan 31 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
Jun 11 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
用Python PIL实现几个简单的图片特效
Jan 18 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
Python实现个人微信号自动监控告警的示例
Jul 03 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
Oct 15 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
PHP实时显示输出
2008/10/02 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP整数取余返回负数的相关解决方法
2014/05/15 PHP
详解php中 === 的使用
2016/10/24 PHP
jQuery的slideToggle方法实例
2013/05/07 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
Vue实现点击按钮复制文本内容的例子
2019/11/09 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
使用python实现rsa算法代码
2016/02/17 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
使用Filter过滤python中的日志输出的实现方法
2019/07/17 Python
python正则-re的用法详解
2019/07/28 Python
Numpy的简单用法小结
2019/08/28 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
室内设计专业学生的自我评价分享
2013/11/27 职场文书
法定代表人授权委托书
2014/09/19 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
晚会开幕词
2015/01/28 职场文书
运动会广播稿200字
2015/08/19 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
Spring Cloud OAuth2实现自定义token返回格式
2022/06/25 Java/Android