socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.模块中,已经实现了一些可供使用的类.

python3中,导入socketserver模块使用的命令:

import socketserver

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

1.处理程序

使用socketserver模块 ,必须先定义一个继承自BaseRequestHandle的处理程序类.

BaseRequestHandle类的实例化可以实现以下方法:

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

对于数据报服务,还是包含收到数据的字节字符串.

2.sock.setup()该方法在handle()之前调用.默认情况下,不执行任何操作.如果希望服务器实现更多连接设置(如建立SSL连接),则无需调用该方法.

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

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

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

2.服务器

要使用处理程序,必须将其插入到服务器对象.

定义了四个基本的服务类.

(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.sock.socket               用于传入请求的套接字对象
2.sock.server_address 监听服务器的地址.比如元组("127.0.0.1",80)
3.sock.RequestHandlerClass 传递给服务器构造函数并由用户提供的请求处理程序类.
4.sock.serve_forever() 处理无限的请求.
5.sock.shutdown() 停止serve_forever()循环.
6.sock.fileno() 返回服务器套接字的整数文件描述符.该方法可以有效的通过轮询操作(如select()函数)使用服务器实例.

3.定义自定义服务器

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

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

1.ForkingMinIn          将UNIX进程分支添加到服务器的混合方法,使用该方法可以让服务器服务多个客户.
2.ThreadingMinIn 修改服务器的混合类,可以使用多线程服务多个客户端.

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

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

1.ForkingUDPServer(address,handler)
2.ForkingTCPServer(address,handler)
3.TthreadingUDPServer(address,handler)
4.ThreadingTCPServer(address,handler)

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

 1.BaseServer                   包含服务器的核心功能与混合类(min-in)的钩子功能.这个类主用于派生,不要直接生成这个类的类对象,可以考虑使用TCPServer和UDPServer类.
2.TCPServer 基本的网络同步TCP服务器
3.UDPServer 基本的网络同步UDP服务器
4.ForkingMinIn 实现了核心的进程化功能,用于与服务器类进行混合(min-in),以提供一些异步特性.不要直接生成这个类的对象
5.ThreadingMinIn 实现了核心的线程化功能,用于与服务器类进行混合(min-in),以提供一些异步特性,不要直接生成这个类的对象
6.ForkingTCPServer ForkingMinIn与TCPServer的组合
7.ForkingUDPServer ForkingMinIn与UDPServer的组合
8.BaseRequestHandler
9.StreamRequestHandler TCP请求处理类的一个实现
10.DataStreamRequestHandler UDP请求处理类的一个实现

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

# !/usr/bin/env python
# _*_coding:utf-8_*_ import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self):
print("from conn:",self.request) s1=socketserver.ThreadingTCPServer(("127.0.0.1",9999),MyServer)
s1.serve_forever()

python3操作socketserver的更多相关文章

  1. 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化

    继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...

  2. python3操作redis

    redis也被称为缓存 1.redis是一个key-value存储系统,没有ForeignKey和ManyToMany的字段. 2.在redis中创建的数据彼此之间是没有关系的,所以也被称为是非关系型 ...

  3. python3操作mysql教程

    一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...

  4. Python3操作MySQL基于PyMySQL封装的类

    Python3操作MySQL基于PyMySQL封装的类   在未使用操作数据库的框架开发项目的时候,我们需要自己处理数据库连接问题,今天在做一个Python的演示项目,写一个操作MySQL数据库的类, ...

  5. python3操作PyMySQL笔记

    python3操作mysql需要先安装PyMySQL pip install PyMySQL 在linux登录mysql ,并且在安装数据库时设置了数据库的用户名“root”和密码“root”,mys ...

  6. 【Python数据分析】Python3操作Excel-以豆瓣图书Top250为例

    本文利用Python3爬虫抓取豆瓣图书Top250,并利用xlwt模块将其存储至excel文件,图片下载到相应目录.旨在进行更多的爬虫实践练习以及模块学习. 工具 1.Python 3.5 2.Bea ...

  7. python-phpbb3 (可以用python3 操作 phpbb3 论坛的模块)

    python-phpbb3 2016年8月30日 04:50:48 codegay phpbb3是PHP写的开源的论坛,python-phpbb3这个项目是用python3实现很多对phpbb3论坛操 ...

  8. python3操作MySQL的模块pymysql

    本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中 ...

  9. Python3操作MySQL,查询数据并保存到文件中

    我们在测试过程中,可能需要到数据库中拉去一些数据,为从测试准备.比如最近在做接口性能测试的时候,就需要很多数据来支撑,所以就需要的数据库去查询数据,下面就是python3 查询 mysql 并且保存到 ...

随机推荐

  1. SRM13

    由于种种原因,好像出了点锅……? 好在问题不是很大. 得分比我估的要低啊. 木之本樱 计算几何送分题 就是叫你求一共有多少组四线共点,O(n^4)暴力可以过初.枚举两条线,求出交点之后求有多少条直线过 ...

  2. 51 nod 1211 数独 DLX

    原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1211 调了挺久的,自己的一份舞蹈链模板…… 算是在网上见到的模 ...

  3. 2017 Multi-University Training Contest - Team 1 1011&&HDU 6043 KazaQ's Socks【规律题,数学,水】

    KazaQ's Socks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  4. [hdu5225][BC#40]Tom and permutation

    好久没写题解了..GDKOI被数位DP教做人了一发,现在终于来填数位DP的大坑了>_<. 发现自己以前写的关于数位DP的东西...因为没结合图形+语文水平拙计现在已经完全看不懂了嗯. 看来 ...

  5. Java 大数类BigInteger和BigDecimal的基本函数

    在Java中有两个类BigInteger和BigDecimal分别表示不可变的任意精度的整数和不可变的有符号的任意精度的十进制数(浮点数).主要用于高精度计算中.这两个类使得java中的大数,高精度运 ...

  6. RPM挂载光盘(使用iso里面的来搭建yum环境)就是离线模式,

    找到光盘的完整路径名.在命令行输入:ls -l /dev | grep cdrom.   可以看到光盘的名字叫做:cdrom1.然后在命令行执行: mount /dev/cdrom1    /mnt/ ...

  7. Angular(2+) 国际化方案(ngx-translate)

    本文只针对ngx-translate/core 6.x版本,如果你使用的是5.x或者更低的版本,请参照以下链接. https://github.com/ngx-translate/core/blob/ ...

  8. vue集成百度UEditor富文本编辑器

    在前端开发的项目中.难免会遇到需要在页面上集成一个富文本编辑器.那么.如果你有这个需求.希望可以帮助到你 vue是前端开发者所追捧的框架,简单易上手,但是基于vue的富文本编辑器大多数太过于精简.于是 ...

  9. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)

    上次我们使用精度评估得到的成绩是 61%,成绩并不理想,再使 recall 和 f1 看下成绩如何? 首先我们先了解一下 召回率和 f1. 真实结果 预测结果 预测结果   正例 反例 正例 TP 真 ...

  10. jQuery中foreach的continue和break

    摘录自:http://blog.csdn.net/penginpha/article/details/12159389 1. continue. 可以使用return. $("***&quo ...