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对象

 

posted @ 2017-10-20 13:58  九二零  阅读(76)  评论(0编辑  收藏  举报