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

 更新时间:2020年04月09日 10:05:38   作者:随风行云  
这篇文章主要介绍了python网络编程:socketserver的基本使用方法,结合实例形式分析了python网络编程中socketserver的基本功能、使用方法及操作注意事项,需要的朋友可以参考下

本文实例讲述了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()
      • image
    • 停止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类的动态修改的实例方法

    这篇文章主要介绍了Python类的动态修改的实例方法的相关资料,需要的朋友可以参考下
    2017-03-03
  • 详解Python中matplotlib模块的绘图方式

    详解Python中matplotlib模块的绘图方式

    Matplotlib是Python中最受欢迎的数据可视化软件包之一,它是 Python常用的2D绘图库,同时它也提供了一部分3D绘图接口。本文将详细介绍Matplotlib的绘图方式,需要的可以参考一下
    2022-07-07
  • 女神相册密码忘记了 我只用Python写了20行代码

    女神相册密码忘记了 我只用Python写了20行代码

    这篇文章主要介绍了怎么样用Python写了20行代码来破解找回已经忘记的密码,密码的排列组合是有限的,遍历尝试就能够试出正确的密码,但这个工作要怎么用python实现,请看下文
    2021-08-08
  • python实现求纯色彩图像的边框

    python实现求纯色彩图像的边框

    这篇文章主要为大家详细介绍了python实现求纯色彩图像的边框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • Python中dumps与dump及loads与load的区别

    Python中dumps与dump及loads与load的区别

    这篇文章主要介绍了Python中dumps与dump、loads与load的区别,json模块提供了一种很简单的方式来编码和解码JSON数据。其中两个主要的函数是json.dumps()和json.loads(),需要的朋友可以参考下
    2022-04-04
  • 使用Python实现BT种子和磁力链接的相互转换

    使用Python实现BT种子和磁力链接的相互转换

    这篇文章主要介绍了使用Python实现BT种子和磁力链接的相互转换的方法,有时比如迅雷无法加载磁力链接或者无法上传附件分享时可以用到,需要的朋友可以参考下
    2015-11-11
  • Python 在 VSCode 中使用 IPython Kernel 的方法详解

    Python 在 VSCode 中使用 IPython Kernel 的方法详解

    这篇文章主要介绍了Python 在 VSCode 中使用 IPython Kernel 的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 3种Python 实现酷炫进度条的实用方法

    3种Python 实现酷炫进度条的实用方法

    这篇文章主要介绍了3种Python 实现酷炫进度条的实用方法,文章围绕Python的相关资料展开对实现进度条的介绍,需要的小伙伴可以参考一下
    2022-04-04
  • python内置HTTP Server如何实现及原理解析

    python内置HTTP Server如何实现及原理解析

    这篇文章主要为大家介绍了python内置HTTP Server如何实现及原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • python openpyxl方法 zip函数用法及说明

    python openpyxl方法 zip函数用法及说明

    这篇文章主要介绍了python openpyxl方法 zip函数用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论