昨日回顾

计算机的计量单位

int类型的能表示的范围:2的7次方减一

计算机表示范围为2的8次方

1个小格是一个比特位

8个小格8个比特位是一个字节 1b

1024个字节是1kb

1024kb是1mb

1024mb是1g

基于socket的udp

#服务端
import socket
soc=socket.socket(family=socket.AF_INET,type=socket.SOCK_DGRAM)
soc.bind(('127.0.0.1',8009))
data,addr=soc.recvfrom()
soc.sendto('xxx'.encode('utf8'),addr)
特点:
    不需要建立连接,不需要确认
    数据报协议:可以传空

基于socketserver的服务端

import socketserver
class MyTcp(socketserver.BaseRequestHandler):
    def handle(self)
    	pass
    
if __name__ == '__main__':
    server=socketserver.ThreadingTCPServer(('127.0.0.1',8008),MyTcp)
    server.serve.forever()

socketserver源码分析

import socketserver
class MyTcp(socketserver.BaseRequestHandler):
    def handle(self):
        # self.server  ThreadingTCPServer的对象:
        # self.request   conn
        #self.client_address   addr
        pass
if __name__ == '__main__':
    server=socketserver.ThreadingTCPServer(('127.0.0.1',8001),MyTcp)
    # server=socketserver.ThreadingUDPServer(('127.0.0.1',8001),MyTcp)
    '''
        1 ThreadingTCPServer实例化:走__init__方法
            -ThreadingTCPServer(ThreadingMixIn, TCPServer)的__init__方法,没有,走的父                 类:TCPServer(BaseServer)的__init__
            -TCPServer(BaseServer)的__init__又调用了父类的__init__
                -赋值操作:self.server_address = server_address
                          self.RequestHandlerClass = RequestHandlerClass
                -数据放到谁当中了?放到了server这个对象中
            -socket.bind()
            -socker.listen()
        2  server.serve_forever()   
            -一堆代码不需要要管:self._handle_request_noblock
                -request, client_address = self.get_request()
                    -self.get_request()在Tcpserver这个类: self.socket.accept()
                - self.process_request(request, client_address):ThreadingMixIn类的                                         process_request
                    -开启线程执行ThreadingMixIn类的process_request_thread,执行了        finish_request(request, client_address, self) 在 BaseServer 类中
                        -request :就是咱的连接对象,conn
                        -client_address 客户端ip和端口
                        -self:server对象,实例化得到的server对象
                        -实例化RequestHandlerClass得到一个对象:会走__init__方法
                        -RequestHandlerClass没有,走的BaseRequestHandler类的__init__
                        -会执行handle方法,通信逻辑
    '''
    server.serve_forever()    
原文地址:https://www.cnblogs.com/aden668/p/11497470.html