如何使用python中socketserver
这篇文章主要为大家展示了如何使用python中socketserver,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。
socketserver的介绍:
socketserver的使用:首先导入模块:import socketserver初始化控制器类Handler【Handler是一个继承BaseRequestHandler的类Handler中的handle方法决定了每一个连接过来的操作】 【控制器类的类名可以是其他的,不一定是Handler,只要继承了BaseRequestHandler就行】init():初始化控制设置,初始化连接套接字,地址,处理实例等信息handle(): 定义了如何处理每一个连接。setup(): 在handle()之前执行.一般用作设置默认之外的连接配置finish():在handle()之后执行。变量:self.request属性是套接字对象,所以使用self.request.xxxx调用套接字的函数self.server包含调用处理程序的实例self.client_address是客户端地址信息定义服务端类型【将Handler类和服务端的地址端口参数传入】:TCPServer 支持ipv4的TCP协议的服务器。server=socketserver.TCPServer((HOST,PORT),Handler)【Handler】UDPServer 支持ipv4的UDP协议的服务器。server=socketserver.UDPServer((HOST,PORT),Handler)运行服务端持续循环运行:serve_forever(),即使一个连接报错了,但不会导致程序停止,而是会持续运行,与其他客户端通信server.serve_forever()停止server_forever:shutdown()server.shutdown()服务端:
import socketserverclass MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): try: while True: self.data=self.request.recv(1024) print("{} send:".format(self.client_address),self.data) if not self.data: print("connection lost") break self.request.sendall(self.data.upper()) except Exception as e: print(self.client_address,"连接断开") finally: self.request.close() def setup(self): print("before handle,连接建立:",self.client_address) def finish(self): print("finish run after handle")if __name__=="__main__": HOST,PORT = "localhost",9999 server=socketserver.TCPServer((HOST,PORT),MyTCPHandler) server.serve_forever()客户端:
import socketclient=socket.socket()client.connect(('localhost',9999))while True: cmd=input("(quit退出)>>").strip() if len(cmd)==0: continue if cmd=="quit": break client.send(cmd.encode()) cmd_res=client.recv(1024) print(cmd_res.decode())client.close()
socketserver的异步服务端:
多线程:ThreadingTCPServer
多进程:ForkingTCPServer(Unix)
多线程版:
import socketserverclass MyTCPHandler(socketserver.BaseRequestHandler): def handle(self): try: while True: self.data=self.request.recv(1024) print("{} send:".format(self.client_address),self.data) if not self.data: print("connection lost") break self.request.sendall(self.data.upper()) except Exception as e: print(self.client_address,"连接断开") finally: self.request.close() def setup(self): print("before handle,连接建立:",self.client_address) def finish(self): print("finish run after handle")HOST,PORT = "localhost",9999server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#多线程版server.serve_forever()
以上就是关于如何使用python中socketserver的内容,如果你们有学习到知识或者技能,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。