python-day29(socketserver ftp知識點講解)
阿新 • • 發佈:2018-11-26
一. Socketserver
1 import socketserver 2 3 class KnightServer(socketserver.BaseRequestHandler): 4 5 def handle(self): 6 # self.request 相當於conn連結通道 7 while 1: 8 from_client_msg = self.request.recv(1024) 9 print(from_client_msg.decode('utf-8'))10 server_msg = input('服務端說>>>') 11 self.request.send(server_msg.encode('utf-8')) 12 13 14 if __name__ == '__main__': 15 ip_port = ('127.0.0.1',8001) 16 server = socketserver.ThreadingTCPServer(ip_port,KnightServer) 17 server.serve_forever()
1 import socket2 import time 3 client = socket.socket() 4 client.connect(('127.0.0.1',8001)) 5 6 while 1: 7 client_data = input('別開車>>>') 8 client.send(client_data.encode('utf-8')) 9 10 from_server_msg = client.recv(1024) 11 print(from_server_msg.decode('utf-8')) 12 13 client.close()
- 啟動服務端程式
- 執行 TCPServer.__init__ 方法,建立服務端Socket物件並繫結 IP 和 埠
- 執行 BaseServer.__init__ 方法,將自定義的繼承自SocketServer.BaseRequestHandler 的類 MyRequestHandle賦值給self.RequestHandlerClass
- 執行 BaseServer.server_forever 方法,While 迴圈一直監聽是否有客戶端請求到達 ...
- 當客戶端連線到達伺服器
- 執行 ThreadingMixIn.process_request 方法,建立一個 “執行緒” 用來處理請求
- 執行 ThreadingMixIn.process_request_thread 方法
- 執行 BaseServer.finish_request 方法,執行 self.RequestHandlerClass() 即:執行 自定義 MyRequestHandler 的構造方法(自動呼叫基類BaseRequestHandler的構造方法,在該構造方法中又會呼叫 MyRequestHandler的handle方法
二. ftp