1. 程式人生 > >python-day29(socketserver ftp知識點講解)

python-day29(socketserver ftp知識點講解)

一. 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 socket
2 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