电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 1911 人浏览分享

socket + select 完成伪并发操作的实例

[复制链接]
1911 0

下面小编就为大家带来一篇socket + select 完成伪并发操作的实例。
小编觉得挺不错的,现在就分享给大家,也给大家做个参考。
一起跟随小编过来看看吧


实例如下:

  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-

  3. import socket
  4. #创建一个socket对象
  5. sk1 = socket.socket()
  6. #绑定ip和端口
  7. sk1.bind(('127.0.0.1', 8001))
  8. #监听
  9. sk1.listen()
  10. #定义一个字典存放客户端发送的信息
  11. message_dict = {}
  12. #inputs用于存放socket对象
  13. inputs = [sk1]
  14. #哪一个客户端发送信息就把哪一个客户端的存放进output
  15. output = []
  16. import select
  17. while True:
  18.   r_list, w_list, e_list = select.select(inputs, output, inputs, 1)
  19.   print('正在监听的socket%d' %len(inputs))
  20.   print(r_list)
  21.   for sk_or_conn in r_list:
  22.     if sk_or_conn == sk1:
  23.       conn, address = sk_or_conn.accept()
  24.       inputs.append(conn)
  25.       message_dict[conn] = []
  26.     else:
  27.       try:
  28.         data_bytes = sk_or_conn.recv(1024)
  29.       except Exception as ex:
  30.         inputs.remove(sk_or_conn)
  31.       else:
  32.         data_str = str(data_bytes, encoding='utf-8')
  33.         message_dict[sk_or_conn].append(data_str)
  34.         output.append(sk_or_conn)
  35.   for conn in w_list:
  36.     data_message = message_dict[sk_or_conn][0]
  37.     del message_dict[sk_or_conn][0]
  38.     conn.sendall(bytes(data_message + '好',encoding='utf-8'))
  39.     output.remove(conn)
复制代码


以上这篇socket + select 完成伪并发操作的实例就是小编分享给大家的全部内容了。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.