用for循环执行多用户访问
SEVER
import socket sk1 = socket.socket() sk1.bind(('127.0.0.1', 888)) sk1.listen() import select ipt = [sk1, ] output = [] message_dic={} eer=[] while True: r_list, w_list, e_list = select.select(ipt, output, eer, 1) print('正在监听的sk对象 %s' % len(ipt)) print(r_list) # for con in w_list: # con.sendall(bytes('hey', encoding='utf-8')) # output.remove(con) for sk_con in r_list: if sk_con == sk1: # 表示新客户来 con, addr = sk_con.accept() ipt.append(con) message_dic[con]=[] else: # 老客户发消息 try: data_bytes = sk_con.recv(1024) # data_str = str(data_bytes, encoding='utf-8') # sk.sendall(bytes(data_str + 'hao', encoding='utf-8')) except ConnectionResetError: eer.append(sk_con) else: # 用户正常发消息 data_str = str(data_bytes, encoding='utf-8') message_dic[sk_con].append(data_str) output.append(sk_con) # ipt.remove(sk) # con.sendall(bytes('hi',encoding='utf-8')) # for sk in e_list: # ipt.remove(sk) for cont in w_list: rec_str=message_dic[cont][0] cont.sendall(bytes(rec_str+'hhhhh',encoding='utf-8')) del message_dic[cont][0] output.remove(cont) for sk in e_list: ipt.remove(sk)
sk1=socket.socket() sk1.bind(('127.0.0.1',888)) sk1.listen() import select ipt=[sk1,] output=[] while True: r_list, w_list, e_list = select.select(ipt, output, ipt, 1) print('正在监听的sk对象 %s' % len(ipt)) print(r_list) for con in w_list: con.sendall(bytes('hey', encoding='utf-8')) output.remove(con) for sk in r_list: if sk==sk1: # 表示新客户来了 con,addr=sk.accept() ipt.append(con) else: # 老客户发消息 try: data_bytes=sk.recv(1024) data_str=str(data_bytes,encoding='utf-8') sk.sendall(bytes(data_str+'hao',encoding='utf-8')) except ConnectionResetError: output.append(sk) # ipt.remove(sk) # con.sendall(bytes('hi',encoding='utf-8')) # for sk in e_list: # ipt.remove(sk)