1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 import socket 4 sk1 = socket.socket() 5 sk1.bind(('127.0.0.1',8001,)) 6 sk1.listen() 7 8 inputs = [sk1,] 9 outputs = []10 message_dict = {}11 import select12 while True:13 # [sk1,sk2,sk3]select内部自动监听sk1,sk2,sk3,三个对象,一旦某个句柄发生变化(accept())14 # 如果有链接sk115 # r_list = [sk1,sk2]16 r_list,w_list,e_list = select.select(inputs,outputs,inputs,1)17 print('正在监听的socket对象%d' % len(inputs))18 print(r_list)19 for sk1_or_conn in r_list:20 # 每一个链接对象21 if sk1_or_conn ==sk1:22 # 表示有新用户链接23 conn,adress = sk1_or_conn.accept()24 inputs.append(conn)25 message_dict[conn] = []26 else:27 # 表示有老用户来链接28 try:29 data_bytes = sk1_or_conn.recv(1024)30 except Exception as e:31 else:32 data_str = str(data_bytes, encoding='utf-8')33 message_dict[sk1_or_conn].append(data_str)34 outputs.append(sk1_or_conn)35 #sk1_or_conn.sendall(bytes(data_str + '好', encoding='utf-8'))36 for conn in w_list:37 recv_str = message_dict[conn][0]38 del message_dict[conn][0]39 conn.sendall(bytes(recv_str + '好', encoding='utf-8'))40 outputs.remove(conn)41 for sk in e_list:42 inputs.remove(sk)