php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...

准备文件:

IO.py  服务端代码

tcp_c.py 客户端代码

IO.py 代码:

from select import * #引入 select 模块

from socket import * #引入 socket 模块

s = socket() #实例化一个socket 对象

s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) #设置端口可重用

s.bind(('0.0.0.0',8888)) #绑定端口号 8888

s.listen(5) #设置监听队列

rlist = [s] #设置读列表(被动列表)

wlist = [] #设置写列表(主动列表)

xlist = [] #设置出错列表

while True: #循环等待客户端连接

rs,ws,xs = select(rlist, wlist, xlist) #将三个列表托管给select 对象

for r in rs: #遍历 读列表(收到客户端请求的对象)

if r is s: # 如果是 s 套接字对象接收到请求,则说明是新的用户连接

c,addr = s.accept() #处理客户端请求,将连接套接字赋值给 c 用户地址赋值给 addr

print(addr,'连接至s') #打印连接提示信息

rlist.append(c) #将连接套接字添加进 读列表,以便保持持续的连接

else: #如果不是 s 套接字对象接收的请求,则说明是已有的现成连接

data = r.recv(1024) #接收客户端传过来的数据

if not data:#如果没有发送过来任何数据

r.close() #将当前套接字关闭

rlist.remove(r) #将当前套接字移除出rlist列表,使 select 不再监管此对象

else: #如果有发送过来的数据

print(data.decode()) #打印出客户端发送过来的数据

r.send('已收到你的消息'.encode()) #给客户端回复数据

for w in ws: #遍历 写列表(主动发起的列表)  只要此列表有对象,会马上触发

pass #由于基本上用不到这个列表,所以此处不写任何代码

for x in xs: #遍历 发生错误的套接字列表

pass #由于基本上用不到这个列表,所以此处不写任何代码

f6f76d875701219f6c00251d9aeffbee.png

tcp_c.py代码:

from socket import *

import time

#创建套接字

sockfd = socket(AF_INET,SOCK_STREAM)

#发起连接

server_addr = ('127.0.0.1',8888)

sockfd.connect(server_addr)

i = 0

while True:

data = input('发送>>')

#data = '哈哈'+str(i)

sockfd.send(data.encode())

data = sockfd.recv(1024)

print('接收到:',data.decode(),i)

i += 1

sockfd.close()

91e2f86f2b51bcbb3f8472ce38d6193a.png

运行结果:

ae6eb995a92e81da3913279c18317dcf.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值