2023年7月15日发(作者:)
pythonsocketserver模块详解_Python:SocketServer模块在Python3中,本模块为socketserver模块。在Python 2中,本模块为SocketServer模块。所以在⽤import导⼊时,要分情况导⼊,否则会报错。导⼊的代码如下:1try:2import socketserver#Python 33except ImportError:4import SocketServer#Python 2SocketSerror模块包括许多可以简化TCP、UDP、UNIX域套接字 服务器实现的类。⼀、建⽴⾃⼰的处理程序要使⽤本模块,必须定义⼀个继承于基类BaseRequestHandler的处理程序类。BaseRequestHandler类的实例h可以实现以下⽅法:1、() 调⽤该⽅法执⾏实际的请求操作。调⽤该函数可以不带任何参数,但是⼏个实例变量包含有⽤的值。t包含请求,_address包含客户端地址,包含调⽤处理程序的实例。对于TCP之类的数据流服务,t属性是套接字对象。对于数据报服务,它是包含收到数据的字节字符串。2、() 该⽅法在handle()之前调⽤。默认情况下,它不执⾏任何操作。如果希望服务器实现更多连接设置(如建⽴SSL连接),可以在这⾥实现。3、() 调⽤本⽅法可以在执⾏完handle()之后执⾏清除操作。默认情况下,它不执⾏任何操作。如果setup()和handle()⽅法都不⽣成异常,则⽆需调⽤该⽅法。注:如果知道应⽤程序只能操纵⾯向数据流的连接(如TCP),那么应从StreamRequestHandler继承,⽽不是BaseRequestHandler。StreamRequestHandler类设置了两个属性,是将数据写⼊客户端的类⽂件对象,是从客户端读取数据的类⽂件对象。如果要编写针对数据包操作的处理程序并将响应持续返回发送⽅,那么它应当从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、 ⽤于传⼊请求的套接字对象。2、_address 监听服务器的地址。如元组("127.0.0.1",80)3、tHandlerClass 传递给服务器构造函数并由⽤户提供的请求处理程序类。4、_forever() 处理⽆限的请求5、wn() 停⽌serve_forever()循环6、() 返回服务器套接字的整数⽂件描述符。该⽅法可以有效地通过轮询操作(如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、BaseRequestHandler9、StreamRequestHandler TCP请求处理类的⼀个实现10、DataStreamRequestHandler UDP请求处理类的⼀个实现现在繁杂的事务都已经封装到类中了,直接使⽤类即可。使⽤SocketServer模块编写的TCP服务器端代码:01#! /usr/bin/env python02#coding=utf-803"""使⽤SocketServer来实现简单的TCP服务器"""04from SocketServerimport (TCPServer,StreamRequestHandler as SRH)05from timeimport ctime0607class MyRequestHandler(SRH):08def handle(self):09print "connected from ",_("[%s] %s" %(ctime(),ne()))1112tcpSer=TCPServer(("",10001),MyRequestHandler)13print "waiting for connection"_forever()相应的TCP客户端代码:01#! /usr/bin/env python02#coding=utf-803from socketimport *04BUFSIZE=102405#每次都要创建新的连接06while True:07tcpClient=socket(AF_INET,SOCK_STREAM)t(("localhost",10001))09data=raw_input(">")10if not data:("%srn" %data)13data1=(BUFSIZE)14if not data1:15break16print ()()
发布者:admin,转转请注明出处:http://www.yc00.com/news/1689409698a243463.html
评论列表(0条)