The use of socketserver based on TCP:
Server
import socketserver class MyTcpHandler (socketserver.BaseRequestHandler): def handle(self): while True: try: data=self.request.recv(1024) if not data:break#This line of code is for linux system self.request.send(data.upper()) except ConnectionResetError: break self.request.close() if __name__ == '__main__': server=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyTcpHandler) server.serve_forever()
self.request in this code is equivalent to a conn:
client
from socket import * import them client = socket (AF_INET, SOCK_STREAM) client.connect(('127.0.0.1',8080)) while True: msg='%s hello'%os.getpid() client.send(msg.encode("utf-8")) data=client.recv(1024) print(data.decode('utf-8'))
The use of socketserver based on UDP:
Server
import socketserver class MyUdpHandler(socketserver.BaseRequestHandler): def handle(self): res=self.request[0] print('Data sent by client: ',res) self.request[1].sendto(res.upper(),self.client_address) if __name__ == '__main__': server=socketserver.ThreadingUDPServer(('127.0.0.1',8080),MyUdpHandler) server.serve_forever()
At this point self.request is a tuple:
client
from socket import * import them client = socket (AF_INET, SOCK_DGRAM) while True: msg='%s hello'%os.getpid() client.sendto(msg.encode('utf-8'),('127.0.0.1',8080)) data,server_addr=client.recvfrom(1024) print(data.decode('utf-8'))