zoukankan      html  css  js  c++  java
  • 第二十三篇、IO多路复用 二

    基于IO多路复用实现socket的连接

    下面流程:
    1、先创建列表,让自己的socket对象传入,然后遍历select第一个参数
    2、客户端连接,那么客户端socket就传入到了列表里面,
    3、遍历,接收客户端信息,并且发送
    4、客户端断开,那么就移除掉这个客户端
     1 import socket
     2 sk = socket.socket()
     3 sk.bind(("127.0.0.1",993))
     4 sk.listen()
     5 impute = [sk,]
     6 import select
     7 while True:
     9     r_list, w_list, e_list = select.select(impute, [], [], 1)
    10     print("正在监听的socket对象%d" % len(impute))
    11     print(r_list)
    12     for s in r_list:
    13         # 每一个连接对象
    14         if s == sk:
    15             #新用户连接
    16             conn, addres = s.accept()
    17 # 这个时候impute列表就包含两个对象1、服务端本身的socket对象2、客户端socket对象(conn是用来和客户端socket对象进行交互的)
    18             impute.append(conn)
    19         else:
    20             try:
    21                 data_bytes = s.revc(1024)
    22             #这里判断,如果用户发消息就发送给客户端消息,否则就移除这个连接
    23                 data_str = str(data_bytes,encoding="utf-8")
    24                 s.sendall(bytes(data_str + "", encoding="utf-8"))
    25             except Exception as f:
    26                 impute.remove(s)

    客户端:

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import socket
    obj = socket.socket()
    obj.connect(("127.0.0.1",993))
    
    while True:
        inp = input(">>>")
        obj.sendall(bytes(inp,encoding="utf-8"))
        ret = str(obj.recv(1024),encoding="utf-8")
        print(ret)
        obj.close()

    这样多个客户端都可以连接,但其实内部还是逐步连接的

    select第二个参数用于读写分离

  • 相关阅读:
    NEO发行资产Token
    OSCP考试回顾
    Windows降权
    Mimikatz.ps1本地执行
    MS16-032提权正确方法
    一种通过HTTP传文件出网的姿势
    mac chromedriver error
    关于websocket 在生产环境中遇到的问题 及 解决办法
    how to install protobuff python
    Git 使用疑问
  • 原文地址:https://www.cnblogs.com/pyrene/p/6431711.html
Copyright © 2011-2022 走看看