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网络编程学习笔记(五):socket的一些补充
Jun 09 Python
python网络编程学习笔记(10):webpy框架
Jun 09 Python
使用 Python 获取 Linux 系统信息的代码
Jul 13 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
python多维数组切片方法
Apr 13 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
python实现网页自动签到功能
Jan 21 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
Feb 29 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注入实例
2006/10/09 PHP
获得Google PR值的PHP代码
2007/01/28 PHP
php动态生成JavaScript代码
2009/03/09 PHP
php密码生成类实例
2014/09/24 PHP
php+webSoket实现聊天室示例代码(附源码)
2017/02/17 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
父元素与子iframe相互获取变量和元素对象的具体实现
2013/10/15 Javascript
extjs4 treepanel动态改变行高度示例
2013/12/17 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
如何使用原生Js实现随机点名详解
2021/01/06 Javascript
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
Python set集合类型操作总结
2014/11/07 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Python threading模块condition原理及运行流程详解
2020/10/05 Python
银行实习自我鉴定
2013/10/12 职场文书
建房协议书
2014/04/11 职场文书
文明工地标语
2014/06/16 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
房屋转让协议书
2014/10/18 职场文书
出纳试用期自我评价
2015/03/10 职场文书
春风化雨观后感
2015/06/11 职场文书
新郎婚礼致辞
2015/07/27 职场文书