python学习——socketserver模块实现并发(自己敲的 理论在36天下有)
socketserver模块实现并发
客户端(tcp
# 购买手机 import socket phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#传输协议是通过网络的家族协议,需要参数 是基于tcp(流)或者是基于udp(报)传输协议 # 传输地址(拨通服务电话) phone.connect(('127.0.0.1',8081))#传输给ip地址端口给服务器 循环在这上面会一直刷新所以接收不到值 while True: msg=input('请输入您需要发送的信息>>>: ').strip() if len(msg)==0:continue # 发送信息(通信) phone.send(msg.encode('utf8'))#传输的bytes类型 seng是给自己缓存发东西并不是一一对应的 recv也是在自己内存中 要数据 # 接收信息 data=phone.recv(1024) print(data.decode('utf8')) #手机关机(必须回收资源的操作) phone.close()
服务端
import socketserver class MyrequesHandle(socketserver.BaseRequestHandler): def handle(self): print(self.request) print(self.client_address) while True: try: data = self.request.recv(1024) # 接收bytse类型的最大限度 print(data.decode('utf8')) # 解码输出客户端传来的数据 self.request.send(data.upper()) except Exception: break self.request.close() #记得需要关闭管道否者一直循环下去(看不出) s = socketserver.ThreadingTCPServer(('127.0.0.1', 8081), MyrequesHandle) s.serve_forever()
客户端udp
# 购买手机 import socket phone=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)#传输协议是通过网络的家族协议,需要参数 是基于tcp(流)或者是基于udp(报)传输协议 # 传输地址(拨通服务电话) while True: msg=input('请输入您需要发送的信息>>>: ').strip() # 发送信息(通信) phone.sendto(msg.encode('utf8'),('127.0.0.1',8081)) # 接收信息 data,client_addr=phone.recvfrom(1024) print(data.decode('utf8'),client_addr)
服务端
import socketserver #绑定基类 class MyrequesHandle(socketserver.BaseRequestHandler): def handle(self): # print(self.request) # print(self.client_address) # (b'dsa',< socket.socket fd=364, family=AddressFamily.AF_INET, type=SocketKind.SOCK_DGRAM, proto=0, laddr=('127.0.0.1', 8081) >) # ('127.0.0.1', 59119) clier_data=self.request[0] #客户端连的线 clier_addr=self.request[1] #建立的通道信息 sever_addr=self.client_address #重要的获取返回地址 print(clier_data.decode('utf8')) clier_addr.sendto(clier_data.upper(),sever_addr) #通过传过来的线sendto 传输什么到 什么地址 s = socketserver.ThreadingUDPServer(('127.0.0.1', 8081), MyrequesHandle) s.serve_forever()

浙公网安备 33010602011771号