• io多路复用(三)


     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 select
    12 while True:
    13     # [sk1,sk2,sk3]select内部自动监听sk1,sk2,sk3,三个对象,一旦某个句柄发生变化(accept())
    14     # 如果有链接sk1
    15     # 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)
  • 相关阅读:
    velocity masterplate 第一个程序的运行
    java 关于集合框架
    java 关于>>>位运算
    QCA wifi驱动强制为HT40
    Linux内核调试方法的总结(转载)
    移动端利用webkitbox水平垂直居中
    Under Construction to Beta
    网站自动备份
    writely 邀请?
    Google Carlendar coming ?
  • 原文地址:https://www.cnblogs.com/Erick-L/p/6481161.html
Copyright © 2020-2023  润新知