socket机制下实现的多用户与服务器交互

import select  #IO操作中的监听(一种)
import socket #服务与客户端的交互
sock =socket.socket()
sock.bind(('127.0.0.1',8083))
sock.listen(5)
sock.setblocking(False) #对于socket是否有链接,都进行无阻塞,
my_inp =[sock ,] #建立一个列表,把该列表放到select.select()中,就会让它
#变成监听列表
while True:
r,w,e =select.select(my_inp,[],[]) #监听my_inp列表中的元素是否被触动,
# 并把被触动的元素赋值给r
for obj in r:
if obj == sock:
print('sock',obj) #当客户端链接服务端时,就会触动sock,注意他们是基于tcp协议
conn,addr =obj.accept()#建立客户端与服务端的连接
print('conn ',conn) #conn是服务端到客户端的套接字(管道)
my_inp.append(conn) #把conn加入到监听列表中,当conn收到信息或是断开时,
# 都会触动conn

else:
try: #捕捉try中的代码是否异常,如果异常,即执行except,如果没有异常
#就执行else中的
data =obj.recv(1024) #接收到客户端的信息
except Exception as e:
my_inp.remove(obj) #conn断开时,把它从监听列表中删除
continue
else: #如果执行try中的程序没有异常,就会执行它中的代码
print(data.decode('utf-8'))
my_data =input('>>>:').strip()
obj.send(my_data.encode('utf-8'))

#如果是在Linux系统中,conn断开,data =obj.recv(1024),则data收到的信息是空
#即if not data:
# my_inp.remove(obj)
# continue

转载于:https://www.cnblogs.com/IQ-Python/p/6845808.html

你可能感兴趣的:(socket机制下实现的多用户与服务器交互)