python网络编程:socketserver的基本使用方法实例分析
本文实例讲述了python网络编程:socketserver的基本使用方法。分享给大家供大家参考,具体如下:
本文内容: socketserver的介绍 socketserver的使用 socketserver的异步服务端首发时间:2018-03-21
也可以使用socketserver来创建socket
socketserver的介绍: 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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
相关文章: