【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信。
首先,先了解下SocketServer模块中可供使用的类:
BaseServer:包含服务器的核心功能与混合(mix-in)类挂钩;这个类只用于派生,所以不会生成这个类的实例;可以考虑使用TCPServer和UDPServer。
TCPServer/UDPServer:基本的网络同步TCP/UDP服务器。
UnixStreamServer/ UnixDatagramServer:基本的基于文件同步TCP/UDP服务器。
ForkingMixIn/ ThreadingMixIn:实现了核心的进程化或线程化的功能;作为混合类,与服务器类一并使用以提供一些异步特性;这个类不会直接实例化。
ForkingTCPServer/ ForkingUDPServer:ForkingMixIn和TCPServer/UDPServer的组合。
BaseRequestHandler:包含处理服务请求的核心功能。这个类只用于派生,所以不会生成这个类的实例可以考虑使用StreamRequestHandler或DatagramRequestHandler。
StreamRequestHandler/ DatagramRequestHandler:用于TCP/UDP服务器的服务处理工具。
下面我们正式进入主题,这里我们采用StreamRequestHandler和ThreadingTCPServer来实现客户端与服务器并发连接非阻塞socket。
ThreadingTCPServer派生自ThreadingMixIn,主要实现核心的进程化合线程化功能。
StreamRequestHandler主要用于用于TCP/UDP服务器的服务处理工具。
一、创建SocketServerTCP服务端
#创建SocketServerTCP服务器:
import SocketServer
from SocketServer import StreamRequestHandler as SRH
from time import ctime host = 'xxx.xxx.xxx.xxx'
port = 9999
addr = (host,port) class Servers(SRH):
def handle(self):
print 'got connection from ',self.client_address
self.wfile.write('connection %s:%s at %s succeed!' % (host,port,ctime()))
while True:
data = self.request.recv(1024)
if not data:
break
print data
print "RECV from ", self.client_address[0]
self.request.send(data)
print 'server is running....'
server = SocketServer.ThreadingTCPServer(addr,Servers)
server.serve_forever()
二、创建SocketServerTCP客户端
from socket import * host = 'xxx.xxx.xxx.xxx'
port = 9999
bufsize = 1024
addr = (host,port)
client = socket(AF_INET,SOCK_STREAM)
client.connect(addr)
while True:
data = raw_input()
if not data or data=='exit':
break
client.send('%s\r\n' % data)
data = client.recv(bufsize)
if not data:
break
print data.strip()
client.close()
【python】网络编程-SocketServer 实现客户端与服务器间非阻塞通信的更多相关文章
- 利用Python中SocketServer 实现客户端与服务器间非阻塞通信
利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信 版权声明 本文转自:http://blog.csdn.net/cnmilan/article/details/9664823 ...
- 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,阻塞,其他方法)
重点回顾: (重点)粘包 : 就是因为接收端不知道如何接收数据,造成接收数据的混乱的问题 只发生在tcp协议上. 因为tcp协议的特点是面向数据流形式的传输 粘包的发生主要是因为tcp协议有两个机制: ...
- python网络编程之验证客户端链接的合法性
六.socket的更多方法介绍 服务端套接字函数s.bind() 绑定(主机,端口号)到套接字s.listen() 开始TCP监听s.accept() b被动接收TCP客户的连接,(阻塞式)等待连接的 ...
- Python网络编程(进程池、进程间的通信)
线程池的原理: 线程池是预先创建线程的一种技术.线程池在还没有任务到来之前, 创建一定数量的线程,放入空闲队列中.这些线程都是处于睡眠状态, 即均为启动,不消 ...
- python网络编程-socketserver
一:socketserver简化了网络服务器的编写. 它有4个类:TCPServer,UDPServer,UnixStreamServer,UnixDatagramServer. 这4个类是同步进行处 ...
- python网络编程-socketserver模块
使用socketserver 老规矩,先引入import socketserver 必须创建一个类,且继承socketserver.BaseRequestHandler 这个类中必须重写handle( ...
随机推荐
- cnblogs插件jiathis
博客园cnblogs增加分享插件 <!--jiathis button Begin--> <div id="ckepop"> <span class= ...
- sgu 130Circle dp
130. Circle time limit per test: 0.25 sec. memory limit per test: 4096 KB On a circle border there a ...
- OPENWRT常用设置
常用设置: 计划任务,定时重启 系统--计划任务,每行一个计划任务. 然后是计划任务列表的格式: [minute] [hour] [day of month] [month] [day of week ...
- 关于命名空间的using声明
1.std::cin.std::cout 意思就是编译器通过作用域运算符左边的作用域,去找右边的名字.有点繁琐. 2.可以使用using声明:using namespace::name; 例如,usi ...
- windows安装redis和php拓展
第一步:下载redis 我是win7的环境,直接到https://github.com/MSOpenTech/redis/releases下载windows版本的redis: 第二步:配置path i ...
- MyEclipse教程:使用UML创建模块库——第一部分(一)
MyEclipse 3.15 Style——在线购买低至75折!火爆开抢>> [MyEclipse最新版下载] UML1建模文件存储在建模库中,建模可用于生成Java代码,或者可以从代码中 ...
- Chrome 应用推荐 - Shortcuts for Google™ 3.4.1
Choose from 200+ Google™ services to show up as buttons in a space-saving popup. Official Firefox ex ...
- rocketmq集群安装,配置,测试
完整的安装包及demo请到百度云盘下载: 1.上传安装包 2.解压安装包 创建目录rocketmq mkdir -p /apps/install/rocketmq 解压到目录rocketmq tar ...
- vee-validate 中文配置报错及自定义规则 报错.updateDictionary/.addlocale is not a function
原因由于vee-validate版本更新的问题导致的. 1. 原因分析: a 新版vee-validate的语言配置方法变化了, Validator.localize('zh_CN', zh_CN) ...
- HDU 1590 Searching(求复数向量和的极限)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...