zoukankan      html  css  js  c++  java
  • socket + select 完成伪并发操作

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 
     4 import socket
     5 #创建一个socket对象
     6 sk1 = socket.socket()
     7 #绑定ip和端口
     8 sk1.bind(('127.0.0.1', 8001))
     9 #监听
    10 sk1.listen()
    11 #定义一个字典存放客户端发送的信息
    12 message_dict = {}
    13 #inputs用于存放socket对象
    14 inputs = [sk1]
    15 #哪一个客户端发送信息就把哪一个客户端的存放进output
    16 output = []
    17 import select
    18 while True:
    19     r_list, w_list, e_list = select.select(inputs, output, inputs, 1)
    20     print('正在监听的socket%d' %len(inputs))
    21     print(r_list)
    22     for sk_or_conn in r_list:
    23         if sk_or_conn == sk1:
    24             conn, address = sk_or_conn.accept()
    25             inputs.append(conn)
    26             message_dict[conn] = []
    27         else:
    28             try:
    29                 data_bytes = sk_or_conn.recv(1024)
    30             except Exception as ex:
    31                 inputs.remove(sk_or_conn)
    32             else:
    33                 data_str = str(data_bytes, encoding='utf-8')
    34                 message_dict[sk_or_conn].append(data_str)
    35                 output.append(sk_or_conn)
    36     for conn in w_list:
    37         data_message = message_dict[sk_or_conn][0]
    38         del message_dict[sk_or_conn][0]
    39         conn.sendall(bytes(data_message + '',encoding='utf-8'))
    40         output.remove(conn)
    View Code
  • 相关阅读:
    C++ P1890 gcd区间
    C++ P1372 又是毕业季I
    C++ CF822A I'm bored with life
    C++ P4057 [Code+#1]晨跑
    C++ CF119A Epic Game
    关于树状数组的几点总结
    markdown语法
    portal开发"下拉框"“日期框”查询要怎么配置
    泛型总结--待续
    Actioncontext跟ServletActionContext的区别---未完待续
  • 原文地址:https://www.cnblogs.com/doupy/p/7359835.html
Copyright © 2011-2022 走看看