标签:顺序 属性 ftps strip() 通讯 fc7 源码分析 实现 res
基于tcp的套接字,关键就是两个循环,一个链接循环,一个通信循环
socketserver模块中分两大类:server类(解决链接问题)和request类(解决通信问题)
ftpserver=socketserver.ThreadingTCPServer((‘127.0.0.1‘,8080),FtpServer)
ftpserver.serve_forever()
查找属性的顺序:ThreadingTCPServer->ThreadingMixIn->TCPServer->BaseServer
源码分析总结:
基于tcp的socketserver我们自己定义的类中的
基于udp的socketserver我们自己定义的类中的
import socketserver class MyHandler(socketserver.BaseRequestHandler): def handle(self): #对象的固定方法不能变 #通信循环 while True: try: data=self.request.recv(1024) #conn.recv(1024) if len(data)==0:break self.request.send(data.upper()) #conn.send(data.upper()) except ConnectionResetError: break if __name__ == ‘__main__‘: s=socketserver.ThreadingTCPServer((‘127.0.0.1‘,8080),MyHandler,bind_and_activate=True) s.serve_forever() #本质就是bind和listen,代表连接循环 # 每建立一个连接就会启动一个线程(服务员),+调用FtpServer类产生一个对象,调用该对像下的handle方法,与刚刚建立好的连接进行通信循环
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.connect((‘127.0.0.1‘,8080)) # 指定服务端ip和端口 while True: # msg=input(‘>>: ‘).strip() #msg=‘‘ msg = ‘client1111111‘ # msg=‘‘ if len(msg) == 0:continue phone.send(msg.encode(‘utf-8‘)) data=phone.recv(1024) print(data) phone.close()
import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.connect((‘127.0.0.1‘,8080)) # 指定服务端ip和端口 while True: # msg=input(‘>>: ‘).strip() #msg=‘‘ msg = ‘client22222‘ # msg=‘‘ if len(msg) == 0:continue phone.send(msg.encode(‘utf-8‘)) data=phone.recv(1024) print(data) phone.close()
import socketserver #借助别人写好的模块进行并发的效果 class MyHandler(socketserver.BaseRequestHandler): def handle(self): data=self.request[0] print(‘客户端消息‘,data) self.request[1].sendto(data.upper(),self.client_address) if __name__ == ‘__main__‘: s=socketserver.ThreadingUDPServer((‘127.0.01‘,8080),MyHandler) s.serve_forever() #启动一个线程
import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: msg=‘client11111111111‘ client.sendto(msg.encode(‘utf-8‘),(‘127.0.0.1‘,8080)) data,server_addr=client.recvfrom(1024) print(data) client.close()
import socket client=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) while True: msg=‘client22222222222‘ client.sendto(msg.encode(‘utf-8‘),(‘127.0.0.1‘,8080)) data,server_addr=client.recvfrom(1024) print(data) client.close()
标签:顺序 属性 ftps strip() 通讯 fc7 源码分析 实现 res
原文地址:https://www.cnblogs.com/sui776265233/p/9290109.html