10月20日学习内容整理:socketserver模块补充
一、socketserver模块补充:
Windows系统只支持ThreadingTcpServer,也就是通过多线程实现并发
Windows系统不支持ForkingTcpServer,也就是通过多进程实现并发,因为Windows系统中没有OS.Fork属性,而Linux系统支持
server = SocketServer.ThreadingTCPServer(('127.0.0.1',8008),MyServer
这一句实现的是到listen步骤
server.serve_forever()
这一步实现的是循环建立连接的功能,相当于accept()
并且实例化自己定义类的对象,在初始化的时候就会把连接赋给对象的属性,并且自动触发handle方法
self.request就是拿到了建立好的连接con,也就是上一步实例化时初始化的属性
import socketserver class MyTCPhandler(socketserver.BaseRequestHandler): def handle(self): # print(self) # print(self.request) #self.request=conn while True: try: print(self.client_address) print(self.server) #obj data=self.request.recv(1024) if not data:break self.request.send(data.upper()) except ConnectionResetError: break if __name__ == '__main__': obj=socketserver.ThreadingTCPServer(('127.0.0.1',8082),MyTCPhandler,bind_and_activate=True) # bind_and_activate这个参数默认是True,代表setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)这条命令存在 # socketserver.ForkingTCPServer obj.serve_forever() #连接循环 ''' t=Thread(target=MyTCPhandler().handle) t.start() ''' # obj.server_address #('127.0.0.1',8080) # obj.RequestHandlerClass #MyTCPhandler # obj.socket #s对象