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