在Python3中,本模块为socketserver模块。在Python 2中,本模块为SocketServer模块。所以在用import导入时,要分情况导入,否则会报错。导入的代码如下:

1

try:

2

import socketserver#Python 3

3

except ImportError:

4

import SocketServer#Python 2

SocketSerror模块包括许多可以简化TCP、UDP、UNIX域套接字  服务器实现的类。

一、建立自己的处理程序

要使用本模块,必须定义一个继承于基类BaseRequestHandler的处理程序类。BaseRequestHandler类的实例h可以实现以下方法:

1、h.handle()  调用该方法执行实际的请求操作。调用该函数可以不带任何参数,但是几个实例变量包含有用的值。h.request包含请求,h.client_address包含客户端地址,h.server包含调用处理程序的实例。对于TCP之类的数据流服务,h.request属性是套接字对象。对于数据报服务,它是包含收到数据的字节字符串。

2、h.setup()   该方法在handle()之前调用。默认情况下,它不执行任何操作。如果希望服务器实现更多连接设置(如建立SSL连接),可以在这里实现。

3、h.finish()   调用本方法可以在执行完handle()之后执行清除操作。默认情况下,它不执行任何操作。如果setup()和handle()方法都不生成异常,则无需调用该方法。

注:

如果知道应用程序只能操纵面向数据流的连接(如TCP),那么应从StreamRequestHandler继承,而不是BaseRequestHandler。StreamRequestHandler类设置了两个属性,h.wfile是将数据写入客户端的类文件对象,h.rfile是从客户端读取数据的类文件对象。

如果要编写针对数据包操作的处理程序并将响应持续返回发送方,那么它应当从DatagramRequestHandler继承。它提供的类接口与StramRequestHandler相同。

二、建立服务器对象

要使用处理程序(即步骤一中建立的处理程序),必须将其插入到服务器对象。定义了四个基本的服务器类。

(1)TCPServer(address,handler)   支持使用IPv4的TCP协议的服务器,address是一个(host,port)元组。Handler是BaseRequestHandler或 StreamRequestHandler类的子类的实例。

(2)UDPServer(address,handler)   支持使用IPv4的UDP协议的服务器,address和handler与TCPServer中类似。

(3)UnixStreamServer(address,handler)   使用UNIX域套接字实现面向数据流协议的服务器,继承自TCPServer。

(4)UnixDatagramServer(address,handler)  使用UNIX域套接字实现数据报协议的服务器,继承自UDPServer。

所有四个服务器类的实例都有以下方法和变量:

1、s.socket   用于传入请求的套接字对象。

2、s.sever_address  监听服务器的地址。如元组("127.0.0.1",80)

3、s.RequestHandlerClass   传递给服务器构造函数并由用户提供的请求处理程序类。

4、s.serve_forever()  处理无限的请求

5、s.shutdown()   停止serve_forever()循环

6、s.fileno()   返回服务器套接字的整数文件描述符。该方法可以有效地通过轮询操作(如select()函数)使用服务器实例。

三、自定义自己的服务器对象

服务器往往需要特殊的配置来处理不同的网络地址族、超时期、并发和其他功能,可以通过继承上面四个基本服务器类来自行定义。

可以通过混合类获得更多服务器功能,这也是通过进程或线程分支添加并发行的方法。为了实现并发性,定义了以下类:

(1)ForkingMixIn         将UNIX进程分支添加到服务器的混合方法,使用该方法可以让服务器服务多个客户。

(2)ThreadingMixIn    修改服务器的混合类,可以使用线程服务多个客户端。

要向服务器添加这些功能,可以使用多重继承,其中首先列出混了类。

由于并发服务器很常用,为了定义它,SocketServer预定义了以下服务器类:

(1)ForkingUDPServer(address,handler)

(2)ForkingTCPServer(address,handler)

(3)ThreadingUDPServer(address,handler)

(4)ThreadingTCPServer(address,handler)

上面有点乱,现总结以下:

SocketServer模块中的类主要有以下几个:

1、BaseServer    包含服务器的核心功能与混合类(mix-in)的钩子功能。这个类主要用于派生,不要直接生成这个类的类对象,可以考虑使用TCPServer和UDPServer类。

2、TCPServer    基本的网络同步TCP服务器

3、UDPServer    基本的网络同步UDP服务器

4、ForkingMixIn   实现了核心的进程化功能,用于与服务器类进行混合(mix-in),以提供一些异步特性。不要直接生成这个类的对象。

5、ThreadingMixIn   实现了核心的线程化功能,用于与服务器类进行混合(mix-in),以提供一些异步特性。不要直接生成这个类的对象。

6、ForkingTCPServer     ForkingMixIn与TCPServer的组合

7、ForkingUDPServer    ForkingMixIn与UDPServer的组合

8、BaseRequestHandler

9、StreamRequestHandler    TCP请求处理类的一个实现

10、DataStreamRequestHandler   UDP请求处理类的一个实现

现在繁杂的事务都已经封装到类中了,直接使用类即可。

使用SocketServer模块编写的TCP服务器端代码:

01

#! /usr/bin/env python

02

#coding=utf-8

03

"""使用SocketServer来实现简单的TCP服务器"""

04

from SocketServerimport (TCPServer,StreamRequestHandler  as SRH)

05

from timeimport ctime

06

07

class MyRequestHandler(SRH):

08

def handle(self):

09

print "connected from ",self.client_address

10

self.wfile.write("[%s] %s"  %(ctime(),self.rfile.readline()))

11

12

tcpSer=TCPServer(("",10001),MyRequestHandler)

13

print "waiting for connection"

14

tcpSer.serve_forever()

相应的TCP客户端代码:

01

#! /usr/bin/env python

02

#coding=utf-8

03

from socketimport *

04

BUFSIZE=1024

05

#每次都要创建新的连接

06

while True:

07

tcpClient=socket(AF_INET,SOCK_STREAM)

08

tcpClient.connect(("localhost",10001))

09

data=raw_input(">")

10

if not data:

11

break

12

tcpClient.send("%s\r\n" %data)

13

data1=tcpClient.recv(BUFSIZE)

14

if not data1:

15

break

16

print data1.strip()

17

tcpClient.close()

python socketserver模块详解_Python: SocketServer模块相关推荐

  1. python的pygame模块详解_python游戏模块学习之pygame常规操作讲解

    pygame常规操作 导入模块 import pygame # 导入pygame模块 from sys import exit # 导入退出鼠标点击事件 from math import pi # 导 ...

  2. python中time模块详解_Python time模块详解

    time 模块主要包含各种提供日期.时间功能的类和函数.该模块既提供了把日期.时间格式化为字符串的功能,也提供了从字符串恢复日期.时间的功能. 在 Python 的交互式解释器中先导入 time 模块 ...

  3. python pexpect模块详解_python pexpect模块

    Pexpect模块简介: Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 ...

  4. python email模块详解_python email模块

    python email模块 email模块 电子邮件包是一个用于管理电子邮件消息的库.它的特殊设计不用于向SMTP (RFC 2821).NNTP或其他服务器发送任何电子邮件消息;这些是模块的函数, ...

  5. python logging模块详解_python logging模块使用总结

    目录 logging模块 日志级别 CRITICAL 50 ERROR 40 WARNING 30 INFO 20 DEBUG 10 logging.basicConfig()函数中的具体参数含义 f ...

  6. python中os模块详解_Python OS模块(常见文件操作示例)

    1 Python 常见文件操作示例 2. 3. os.path 模块中的路径名访问函数 4. 分隔 5. basename() 去掉目录路径 , 返回文件名 6. dirname() 去掉文件名 , ...

  7. python pexpect模块详解_python Pexpect模块如何使用 python Pexpect模块使用代码示例

    python Pexpect模块如何使用?本篇文章小编给大家分享一下python Pexpect模块使用代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以 ...

  8. python中configparser详解_python ConfigParser模块详解

    功能介绍 在程序中使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是ConfigParser,这里简单 ...

  9. python中logging模块详解_python logging日志模块详解

    logging 日志模块详解 用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这 ...

  10. python协程详解_python协程详解

    原博文 2019-10-25 10:07 − # python协程详解 ![python协程详解](https://pic2.zhimg.com/50/v2-9f3e2152b616e89fbad86 ...

最新文章

  1. windbg内存断点学习总结
  2. 利用Microsoft Visual Studio查看.dll文件的依赖项及内部函数名
  3. 什么编程语言的开发者平均年薪高达94万?
  4. 解决百度云管家导入未完成下载任务
  5. Alkyne-PEG-COOH 炔烃PEG羧基
  6. MT2014——打靶
  7. 国产手机干翻苹果?原来是靠百元机和猛降价实现的
  8. ArcGIS三维分析之ArcGlobe简要说明
  9. [万字长文] 人脸识别初步调研报告
  10. Linux操作系统下复现github上的项目(一):下载项目、配置环境
  11. eve显示无法连接服务器,eve 链接不到服务器
  12. Socks5代理IP技术详解:如何选择和使用最佳IP代理服务
  13. http协议中get和post的区别:
  14. QT的Listwidget控件
  15. 3.Appium+AndroidStudio环境搭建
  16. 蓝牙模块 hc06 linux,HC-06蓝牙模块设置和使用方法
  17. GlidedSky爬虫雪碧图-1
  18. 浙大版《Python 程序设计》题目集 第3章-18 输出10个不重复的英文字母
  19. 你做过哪些勇敢的事?
  20. SVN之下载项目一半下载中断了转圈圈无响应解决办法cleanup failed to process the following path

热门文章

  1. android app功能测试,androidAPP功能测试要点幻灯片.pptx
  2. c语言使用位运算符包含头文件,C语言的运算符
  3. 如何在 Gitee 上使用 GPG
  4. RabbitMQ Exchange类型详解
  5. SpringBoot配置文件映射到JavaBean
  6. ORACLE(Linux版本)实时同步数据到MYSQL(Linux版本)解决方案:OGG
  7. Android开发笔记(一百三十四)协调布局CoordinatorLayout
  8. PTA编程总结3:抓老鼠
  9. PNG和PVR之间互相转换的脚本
  10. angular4 辅助路由