• python io多路复用


                

    用for循环执行多用户访问

    SEVER
    
    import socket
    sk1 = socket.socket()
    sk1.bind(('127.0.0.1', 888))
    sk1.listen()
    import select
    ipt = [sk1, ]
    output = []
    message_dic={}
    eer=[]
    while True:
        r_list, w_list, e_list = select.select(ipt, output, eer, 1)
        print('正在监听的sk对象 %s' % len(ipt))
        print(r_list)
        # for con in w_list:
            # con.sendall(bytes('hey', encoding='utf-8'))
            # output.remove(con)
        for sk_con in r_list:
            if sk_con == sk1:
                # 表示新客户来
                con, addr = sk_con.accept()
                ipt.append(con)
                message_dic[con]=[]
            else:
                # 老客户发消息
                try:
                    data_bytes = sk_con.recv(1024)
                    # data_str = str(data_bytes, encoding='utf-8')
                    # sk.sendall(bytes(data_str + 'hao', encoding='utf-8'))
                except ConnectionResetError:
                    eer.append(sk_con)
                else:
                    # 用户正常发消息
                    data_str = str(data_bytes, encoding='utf-8')
                    message_dic[sk_con].append(data_str)
                    output.append(sk_con)
                    # ipt.remove(sk)
                    # con.sendall(bytes('hi',encoding='utf-8'))
                    # for sk in e_list:
                    #     ipt.remove(sk)
        for cont in w_list:
            rec_str=message_dic[cont][0]
            cont.sendall(bytes(rec_str+'hhhhh',encoding='utf-8'))
            del message_dic[cont][0]
            output.remove(cont)
        for sk in e_list:
            ipt.remove(sk)
    
    sk1=socket.socket()
    sk1.bind(('127.0.0.1',888))
    sk1.listen()
    
    import select
    ipt=[sk1,]
    output=[]
    while True:
        r_list, w_list, e_list = select.select(ipt, output, ipt, 1)
        print('正在监听的sk对象 %s' % len(ipt))
        print(r_list)
        for con in w_list:
            con.sendall(bytes('hey', encoding='utf-8'))
            output.remove(con)
        for sk in r_list:
            if sk==sk1:
                # 表示新客户来了
                con,addr=sk.accept()
                ipt.append(con)
            else:
                # 老客户发消息
                try:
                    data_bytes=sk.recv(1024)
                    data_str=str(data_bytes,encoding='utf-8')
                    sk.sendall(bytes(data_str+'hao',encoding='utf-8'))
                except ConnectionResetError:
                    output.append(sk)
                    # ipt.remove(sk)
            # con.sendall(bytes('hi',encoding='utf-8'))
    
        # for sk in e_list:
        #     ipt.remove(sk)
    
  • 相关阅读:
    Python 魔术方法及调用方式
    Python metaclasses
    Python 实例方法,类方法和静态方法
    Python 2.x和3.x不同点
    Python 类总结
    Python 添加模块
    Python-读入json文件并进行解析及json基本操作
    linux环境下的python安装过程
    Linux系统目录结构以及简单说明
    linux下python安装
  • 原文地址:https://www.cnblogs.com/ezway/p/6725589.html
Copyright © 2020-2023  润新知