socketserver是啥?

简化了编写网络服务器,就是对于socket的再一次封装
sockerserver包含4个类可以使用:
A=socketserver.TCPServer() #用于TCP/IP传输 #这是最常用的
B=socketserver.UDPServer() #用于UDP传输 #这个也还好
C=socketserver.UnixStreamServer() #基于TCP的unix本机的进程间的通讯 #不常用
D=socketserver.UnixDatagramServer() #基于UDP的unix本机的进程间的通讯 #不常用 创建一个socketserver需要以下步骤:
1、必须创建一个请求处理类,这个类是继承BaseRequestHandler,还必须重写父类的handle方法
2、必须实例化一个服务类实例(TCPServer、UPPServer、UnixStreamServer、UnixDatagramServer)中的一个,一般是TCPServer,并且把监听地址和之前创建的请求处理类做为实例化参数传给这个服务类实例。
3、然后执行服务类实例的handle_request() 或者 server_forever()方法。我们一般不用handle_request()方法,费半天劲写服务,当然是永久执行,接请求啦,所以就是执行server_forever()方法
4、最后,执行 server_close()方法来关闭服务。 例子:最简单的socketserver
import socketserver
class MyHandle(socketserver.BaseRequestHandler): # 创建请求处理类 继承socketserver.BaseRequestHandler类,每一个客户端链接过来都会实例化这个类 --> 步骤:1
def handle(self): #重写覆盖掉父类的handle方法,父类的handle方法是空的,所有与客户端的交互都是handle方法中。 --> 步骤:1
while True: #这里,既然是handle负责与处理客户端的所有交互,可是handle终究是函数,执行完就完了,第二个请求过来就没人处理了。所以要循环一下的 try:
self.data=self.request.recv(1024).strip() #self.request.recv() 这就是接收客户端请求。(request这个词是被写死的,不能改成其他)
print("{} wrote:".format(self.client_address)) # 开始业务处理
print(self.data)
self.request.send(self.data.upper()) # 业务就是把传进来的东西大写了
except ConnectionResetError as e: #这是捕获客户端关闭的异常,python3有这个异常,python2的话,只能判定data为空了
print(self.client_address,e)
break
def setup(self): # 和handle 都是父类的方法名,可以重写,作用是开始业务之前做的事情
pass
def finish(self): # 和handle都是父类的方法名,可以重写,调用handle后会执行,而且不论handle是否成功都会执行
pass if __name__=="__main__":
host,port="0.0.0.0",9999 #监听地址和端口
# server=socketserver.TCPServer((host,port),MyHandle) #实例化一个TCPServer,并且传递一个地址,和业务处理类 --> 步骤:2
server = socketserver.ThreadingTCPServer((host, port), MyHandle) # 实例化一个多线程的TCPServer,也就是ThreadingTCPServer并且传递一个地址,
# 和业务处理类,不是业务处理实例 --> 步骤:2
#每个服务类实例都有对应的多线程服务类,传参是一样的。
print(server.server_address)
print(server.socket,type(server.socket))
# print(server.get_request())
server.serve_forever() #启动服务 --> 步骤:3
server.shutdown() #停止服务 --> 步骤4

socketserver提供的一些平时用不太上,有时又有点用的东东:

socketserver.ThreadingTCPServer.RequestHandlerClass.handle()
socketserver.ThreadingTCPServer.fileno() #返回文件描述符 不太用的到。。。
socketserver.ThreadingTCPServer.handle_request() #处理单个请求,基本不用这个。
socketserver.ThreadingTCPServer.serve_forever() # 一直处理请求,直到收到一个明确的shutdown()请求,过程是会调用service_actions()方法
socketserver.ThreadingTCPServer.service_actions() #当服务停止时,进行收尾工作,处理僵尸什么的 python3.3加入的
socketserver.ThreadingTCPServer.shutdown() #告诉 server_forver(),可以停掉了
socketserver.ThreadingTCPServer.server_close() #关闭
socketserver.ThreadingTCPServer.address_family #这是地址簇的变量,实例化服务类之前明确设定。
socketserver.ThreadingTCPServer.RequestHandlerClass #这是请求处理类,需要被继承,并且实现handle业务方法
socketserver.ThreadingTCPServer.server_address #服务绑定的监听地址,元组
socketserver.ThreadingTCPServer.socket #服务的socket
socketserver.ThreadingTCPServer.get_request() #获取请求的socket.accept(),会阻塞 不怎么用这个

python3.x Day6 socketserver的更多相关文章

  1. Python3中的SocketServer

    socket并不能多并发,只能支持一个用户,socketserver 简化了编写网络服务程序的任务,socketserver是socket的在封装.socketserver在python2中为Sock ...

  2. Python3 Socket和SocketServer 网络编程

    socket只能实现同时一个服务和一个客户端实现交互,socketserver可以实现多个客户端同时和服务端交互 1.利用Socket编写简单的同一个端口容许多次会话的小案例: 服务端: #!/usr ...

  3. python3之socket&socketserver网络编程

    1.套接字与套接模块 套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象.它们允许程序接受并进行连接,如发送和接受数据.为了 ...

  4. python3.x Day6 paramiko

    python3 paramiko模块,用来进行远程操作linux服务器,利用的就是ssh #利用用户名,密码,进行连接 import paramiko #创建一个SSH对象 ssh=paramiko. ...

  5. python3.x Day6 IO多路复用

    IO多路复用import asyncio 这个是异步IO模块 这个还不知道怎么用 select poll epoll 都是IO多路复用 windows 仅支持select linux2.6以后 支持e ...

  6. python3.x Day6 协程

    协程:#定义来自牛人alex博客协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈 ...

  7. python3.x Day6 多进程

    多进程:1.每个子进程申请到的资源都是独立的,不与其他进程共享.2.语法上和线程基本上差不多,使用multiprocessing.Process(target=xxxx,args=(xxx,xxx,x ...

  8. python3.x Day6 多线程

    线程???进程????区别???何时使用??? 进程:是程序以一个整体的形式暴露给操作系统管理,里边包含了对各种资源的调用,内存的使用,对各种资源的管理的集合,这就叫进程 线程:是操作系统最小的调度单 ...

  9. Python之路(第三十三篇) 网络编程:socketserver深度解析

    一.socketserver 模块介绍 socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.(version = "0.4") 在python2中写作S ...

随机推荐

  1. bzoj 1600: [Usaco2008 Oct]建造栅栏【dp】

    要求三边和大于第四边,所以任意一条边的长度都是小于n/2 设f[i][j]为前i条长为j,转移的时候用n/2限制 #include<iostream> #include<cstdio ...

  2. 洛谷 P3355 骑士共存问题【最小割】

    同方格取数问题:https://www.cnblogs.com/lokiii/p/8430720.html 记得把障碍点去掉,不连边也不计入sum #include<iostream> # ...

  3. 【插件开发】—— 13 GEF双击模型事件

    前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 4 SWT编程须知 5 SWT简单控件的使用与布局搭配 6 SWT复杂空间与布局搭配 7 SWT布局详解 ...

  4. 【插件开发】—— 4 SWT编程须知

    根据前两篇博文,应该对插件开发有所了解. 前文回顾: 1 插件学习篇 2 简单的建立插件工程以及模型文件分析 3 利用扩展点,开发透视图 SWT知识介绍 之前学过Java的朋友,多少页会一些关于Swi ...

  5. (矩阵快速幂)51NOD 1242斐波那契数列的第N项

    斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2)   (1, 1, 2, 3, 5, 8, 13, 21, ...

  6. jQuery笔记之Easing Plugin

    jQuery easing 使用方法首先,项目中如果需要使用特殊的动画效果,则需要在引入jQuery之后引入jquery.easing.1.3.js<script type="text ...

  7. 洛谷 P2061 [USACO07OPEN]城市的地平线City Horizon

    简化版的矩形面积并,不用线段树,不用离散化,代码意外的简单 扫描线,这里的基本思路就是把要求的图形竖着切几刀分成许多矩形,求面积并.(切法就是每出现一条与y轴平行的线段都切一刀) 对于每一个切出来的矩 ...

  8. 题解报告:hdu1205吃糖果(插空法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...

  9. PHP autoload实践

    本文目的 本文简要的描述了PHP提供的autoload机制,以及在scake中使用实践.用于减少不必要的文件包含,提高php系统性能. 什么是__autoload php是脚本语言,不同于c++只需要 ...

  10. android开发学习 ------- 弹出框

    这是一种方法,是我觉得简单易懂代码量较少的一种: /* 创建AlertDialog对象并显示 */ final AlertDialog alertDialog = new AlertDialog.Bu ...