python标准库-socketserver的使用
python内置的socket单独是使用时不直接支持并发的,socketserver将socket模块和select模块进行了封装,可以使服务端更方便的处理socket请求。
socketserver是python标准库的模块之一,使用方法:
创建一个请求处理类,继承BaseRequestHandlerclass类并且重写父类的handle()方法,该方法将处理传入的请求。
实例化一个上面类型中的一个类(如TCPServer)传递服务器的地址和你创建的请求处理类 给这个TCPServer。
调用serve_forever()方法来处理请求。
服务端代码:
import socketserver
# 需要定义一个类,并继承tcp相关的类socketserver.BaseRequestHandler
class MyRequestHandle(socketserver.BaseRequestHandler):
# 实现handle方法,处理收到的数据
def handle(self):
# 链接的对象为:self.request
# 客户端的地址为:self.client_address)
while True:
try:
msg = self.request.recv(1024)
if len(msg) == 0: break
# 发送消息
self.request.send(msg.upper())
except Exception:
break
# 如果断开则关闭连接
self.request.close()
# 服务端应该做两件事
# 循环地从半连接池中取出链接请求与其建立双向链接,拿到链接对象
s=socketserver.ThreadingTCPServer(('127.0.0.1',8888),MyRequestHandle)
# 处理多个请求
# 如果只想处理一个请求,可以使用ser.handle_request()
s.serve_forever()
UDP服务端代码:
import socketserver
class MyRequestHanlde(socketserver.BaseRequestHandler):
def handle(self):
client_data=self.request[0]
server=self.request[1]
client_address=self.client_address
server.sendto(client_data.upper(),client_address)
s=socketserver.ThreadingUDPServer(("127.0.0.1",8888),MyRequestHanlde)
s.serve_forever()
License:
CC BY 4.0