1. 程式人生 > >多路復用

多路復用

pri blocking cnblogs star 狀態 nec bin art 對象

服務端
from socket import *
import time
import select
server = socket(AF_INET,SOCK_STREAM)
server.bind((‘127.0.0.1‘,8081))
server.listen(3)
server.setblocking(False)      #accept變為非阻塞狀態,
print(‘server startting...‘)

reads_l = [server,]  #每次來一個客戶端,添加到列表
while True:
    r_l,_,_ = select.select(reads_l,[],[])
    for obj in r_l:   #接收到的對象
        if obj == server:         #server.accept               conn,addr = server.accept
            conn,addr = obj.accept()   #每個對象都有conn,addr
            reads_l.append(conn)
        else:                         #    conn.recv       接收到的數據
            data = obj.recv(1024)    #obj = conn
            obj.send(data.upper())

客戶端
from socket import *
client = socket(AF_INET,SOCK_STREAM)
client.connect((‘127.0.0.1‘,8081))
while True:
    msg = input(‘p;ease:‘).strip()
    if not msg:continue
    client.send(msg.encode(‘utf-8‘))
    data = client.recv(1024)
    print(data.decode(‘utf-8‘))

  

多路復用