利用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

from socket import *

host = 'xxx.xxx.xxx.xxx'

port = 9999

bufsize = 1024

addr = (host,port)

#client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

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()

python3socket非阻塞在linux里无效_利用Python中SocketServer实现客户端与服务器间非阻塞通信方法介绍...相关推荐

  1. python3socket非阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

  2. pythontcp服务器如何关闭阻塞_利用Python中SocketServer 实现客户端与服务器间非阻塞通信...

    利用SocketServer模块来实现网络客户端与服务器并发连接非阻塞通信. 首先,先了解下SocketServer模块中可供使用的类: BaseServer:包含服务器的核心功能与混合(mix-in ...

  3. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...

    在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...

  4. python中none算变量吗_在python中对变量判断是否为None的三种方法总结

    三种主要的写法有: 第一种:if X is None; 第二种:if not X: 当X为None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这 ...

  5. 【适合Python语言小白的股价图】利用Python中的matplotlib绘制股价图(非k线图)

    [适合Python语言小白的股价图]利用Python中的matplotlib绘制股价图(非k线图) 代码小白,最近做一家公司的股价复盘用到了matplotlib,在此做个小小的记录.代码的逻辑比较笨, ...

  6. python连接linux堡垒机_利用Python Paramiko开发linux堡垒机

    1.Paramiko模块下的demo.py程序 前面利用Python中的Paramiko模块可以进行SSH的连接,以及用来传送文件(SFTP),但是无论是哪一种方式,连接都是短暂的,并非是长连的,即一 ...

  7. python3socket非阻塞在linux里无效_Linux下socket设置为非阻塞方式和fcntl系统调用

    用以下方法将socket设置为非阻塞方式 int flags = fcntl(socket, F_GETFL, 0); fcntl(socket, F_SETFL, flags | O_NONBLOC ...

  8. python3 socketserver源码解析_解读python中SocketServer源码

    再看继承 真正的大餐来之前,还是来点儿开胃菜!回顾一下关于类的继承的知识: 我们先看上面的代码,这是一个简单的类继承,我们可以看到父类Base和子类Son,它们中各有一个Testfunc方法,当我们实 ...

  9. python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算

    闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...

最新文章

  1. 多线程程序在多核和单核上运行的不同
  2. toggle 1.9 以后就被删除了
  3. Windows开启远程桌面服务(Win10)
  4. Spring Integration Framework简介
  5. lvs-dr模式原理详解和可能存在的“假负载均衡”
  6. Java多线程面试题总结,Java岗
  7. UVALive 3211 Now or Later (2-SAT)
  8. Redis教程:主从复制
  9. Jsoup解析网页html
  10. paip.自适应网页设计 跟 响应式 设计的区别跟原理and实践总结
  11. 如果Service有多个实现类,Spring怎么知道该注入哪个实现类
  12. Navicat for MySQL触发器更新和插入操作
  13. 你真的理解devDependencies和dependencies区别吗?
  14. 47、建筑设置避难间时,对避难间的要求
  15. 小人物走路、奔跑的VC++游戏特效,适合刚学习VC++游戏编程的朋友
  16. 你不得不了解的linux常用命令,你还不收藏?(日常工作及面试必备)
  17. 学习笔记(05):区块链应用案例-区块链金融应用-保险
  18. Tkinter 莫烦 基础
  19. c语言 malloc 函数用法
  20. 联想g470笔记本开vt_ThinkPad笔记本电脑怎么开启vt虚拟化技术

热门文章

  1. java jtextfield 输入_【java】JTextField与JComboBox结合动态匹配输入信息
  2. python从入门到实践课后题_Python 从入门到实践 函数篇 8-6-8习题
  3. XElement.Load 需要释放吗_因为信用卡逾期还不上坐牢了,刑满释放后,还需要继续还钱吗?...
  4. 天梯—是不是太胖了(C语言)
  5. 天梯—重要的话说三遍(C语言)
  6. vue 使用this.reload方法刷新页面配置
  7. R语言CRAN软件包Meta分析 1
  8. Exchange Server 2016管理系列课件03.管理邮箱配额限制
  9. ubantu下清除项目缓存的方法
  10. python中decode()函数函数的用法