早就听说socketsever特别厉害,可以简化客户端和服务端的实现,尤其是在多线程socket通话的情境下,可以说是一个比较高级的模块
python下的socket编程我们已经学过了,而今天,我们来使用socketsever这个模块,写一个TCP的多线程socket
服务端:
import socketserver class Server(socketserver.BaseRequestHandler): # 使用socketserver模块 ,必先定义一个继承自BaseRequestHandler类 def handle(self): print('New connection:',self.client_address) try: while True: buf = self.request.recv(1024) if not buf: break print('Client data:',buf.decode()) self.request.send(buf) # 收到消息重发客户端 except ConnectionResetError: # 捕捉客户端关闭信息 print('One connection closed') if __name__ == '__main__': HOST = 'localhost' PORT = 8001 server = socketserver.ThreadingTCPServer((HOST,PORT),Server) # 实现多线程通话 server.serve_forever() # 持续运行
客户端:
import socket HOST = 'localhost' PORT = 8001 sock = socket.socket() sock.connect((HOST, PORT)) while True: message = input('Please input:') sock.send(bytes(message, 'utf8')) recv = sock.recv(1024) print(str(recv, 'utf8')) sock.close()
运行截图:
客户端运行:
服务端运行:
当有多个客户端连接时,服务端就会打印其客户端地址,并开始接收其消息