Python怎么使用select实现socket全双工异步通信功能
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,这篇"Python怎么使用select实现socket全双工异步通信功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能
千家信息网最后更新 2025年12月01日Python怎么使用select实现socket全双工异步通信功能
这篇"Python怎么使用select实现socket全双工异步通信功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Python怎么使用select实现socket全双工异步通信功能"文章吧。
select -在单线程网络服务中器程序中,管理多个套接字连接
select的原型为(rlist,wlist,xlist[,timeout]),其中rlist是等待读取的对象,wlist是等待写入的对象,xlist是等待异常的对象,最后一个是可选对象,指定等待的时间,单位是s.
select()方法的返回值是准备好的对象的三元组,若在timeout的时间内,没有对象准备好,那么返回值将是空的列表。
它采用的是轮询的方式来实现异步通信的。
在下面程序中,目前主要支持1对1通信,当双方任何一方发送字符串'88'时,表示结束通信。
下面我们来看看具体实现:
首先是服务器。
#!/usr/bin/python'test TCP server'from socket import *from time import ctimeimport selectimport sysHOST = ''PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpSerSock = socket(AF_INET, SOCK_STREAM)tcpSerSock.bind(ADDR)tcpSerSock.listen(5)input = [tcpSerSock, sys.stdin] #input是一个列表,初始有欢迎套接字以及标准输入while True: print 'waiting for connection...' tcpCliSock, addr = tcpSerSock.accept() print '...connected from:',addr input.append(tcpCliSock) #将服务套接字加入到input列表中 while True: readyInput,readyOutput,readyException = select.select(input,[],[]) #从input中选择,轮流处理client的请求连接(tcpSerSock),client发送来的消息(tcpCliSock),及服务器端的发送消息(stdin) for indata in readyInput: if indata==tcpCliSock: #处理client发送来的消息 data = tcpCliSock.recv(BUFSIZ) print data if data=='88': input.remove(tcpCliSock) break else: #处理服务器端的发送消息 data = raw_input('>') if data=='88': tcpCliSock.send('%s' %(data)) input.remove(tcpCliSock) break tcpCliSock.send('[%s] %s' %(ctime(), data)) if data=='88': break tcpCliSock.close()tcpSerSock.close()以下是客户端的代码,非常类似,只是与服务器相比不需要处理请求信息而已。
#!/usr/bin/python'test tcp client'from socket import *from time import ctimeimport selectimport sysHOST = 'localhost'PORT = 21567BUFSIZ = 1024ADDR = (HOST, PORT)tcpCliSock = socket(AF_INET, SOCK_STREAM)tcpCliSock.connect(ADDR)input = [tcpCliSock,sys.stdin]while True: readyInput,readyOutput,readyException = select.select(input,[],[]) for indata in readyInput: if indata==tcpCliSock: data = tcpCliSock.recv(BUFSIZ) print data if data=='88': break else: data = raw_input('>') if data=='88': tcpCliSock.send('%s' %(data)) break tcpCliSock.send('[%s] %s' %(ctime(), data)) if data=='88': breaktcpCliSock.close()以上就是关于"Python怎么使用select实现socket全双工异步通信功能"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
通信
对象
服务
内容
服务器
消息
处理
功能
双工
套接字
端的
文章
时间
知识
程序
篇文章
准备
一方
代码
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库 801端口
晋中银行 网络安全
网络安全构架
五厘网络技术有限公司资助了哪些方程式车队
web 数据库 负载
主服务器进度条wa
话费88折软件开发
网络技术的优势和缺点
计算机软件开发专业涉及范围
数据库十进制转换标准时间
阿里云磁盘数据库恢复
吉林省网信办网络安全
网络安全保密七条刚性规定
合并数据库不存在或不受支持
Linux服务器书
赣州有哪些好的软件开发公司
数据库插入一条日期字段
拉格纳罗斯服务器
免费 数据库 空间
单招的计算机网络技术是学什么
服务器中都有哪些类型的板卡
俄安安全局数据库
山东交友软件开发费用是多少
云服务器安装redis
软件开发的设计阶段分为
415网络安全教育日视频
黄浦区新能源软件开发概念设计
c 服务器资源管理器
互联网科技2018
网络安全与执法要学的课程