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 socketserver
- class 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 socket
- client=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 socketserver
- class 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",9999
- server=socketserver.ThreadingTCPServer((HOST,PORT),MyTCPHandler)#多线程版
- server.serve_forever()
python网络编程:socketserver的基本使用的更多相关文章
- python网络编程socketserver模块(实现TCP客户端/服务器)
摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...
- python网络编程——SocketServer/Twisted/paramiko模块
在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...
- python网络编程--socketserver 和 ftp功能简单说明
1. socketserver 我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它是在socket的基础上进行了一层封装,也 ...
- python网络编程-socketserver
一:socketserver简化了网络服务器的编写. 它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer. 这4个类是同步进行处 ...
- python 网络编程(socketserver,阻塞,其他方法)
重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...
- python网络编程-socketserver模块
使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python学习(22)python网络编程
Python 网络编程 Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
随机推荐
- Java中的引用传递和值传递
Java中的引用传递和值传递 关于Java的引用传递和值传递,在听了老师讲解后,还是没有弄清楚是怎么一回事,于是查了资料,所以在这里与大家分享,有不对的地方,欢迎大家留言. java中是没有指针的,j ...
- 一个隐蔽的C语言问题反思
今天在编译一个C代码的时候,从别的编译ok的头文件中拷贝了一份在上面做修改,没想到修改好之后一直 无法调用这个头文件中的函数和变量.看了好久,才在预编译宏中找到了问题的根源.代码 如下所示: 头文件A ...
- linux中环境变量PATH设置错误,导致ls cd 等命令不能使用,提示:没有那个文件或目录
在CentOS7中执行了 PATH=/opt/:$PATH 然后执行ls时,出现 ls-bash: ls: 没有那个文件或目录 试了试其他命令也一样无法使用 后来执行 : export PATH=/u ...
- 转载 12步轻松搞定python装饰器
作者: TypingQuietly 原文链接: https://www.jianshu.com/p/d68c6da1587a 呵呵!作为一名教python的老师,我发现学生们基本上一开始很难搞定pyt ...
- Java 单元测试顺序执行
坑死我了,原来@Before会执行多次. 通过函数名可以实现顺序执行,执行顺序和函数的位置无关. import org.junit.Before; import org.junit.BeforeCla ...
- Ubantu常用命令
Ubantu常用命令 ctrl alt t :打开终端 ctrl d : 关闭终端 F11 : 终端全屏,再按一次退出全屏 Super(即win) ...
- python基础学习笔记 - 备忘
基础中的基础 Python标识符 命名规则: Python标识符区分大小写. 可以包括英文.数字以及下划线,但不能以数字开头. 以下划线开头的标识符是有特殊意义的: a) 以单下划线开 ...
- Apache Commons Beanutils 一 (使用PropertyUtils访问Bean属性)
BeanUtils简要描述 beanutils,顾名思义,是java bean的一个工具类,可以帮助我们方便的读取(get)和设置(set)bean属性值.动态定义和访问bean属性: 细心的话,会发 ...
- TCP/IP 笔记 - 地址解析协议
地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射.ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6.地址解析是发现两个地址之间的映射关系的过程 ...
- RocketMQ 分布式事务
在RocketMQ中生产者有三种角色NormalProducer(普通).OrderProducer(顺序).TransactionProducer(事务),根据名字大概可以看出各个代表着什么作用,我 ...