• 非阻塞IO模板


    服务端

    from socke import *
    
    server = socket(AF_INET, SOCK_STREAM)
    server.bind(('127.0.0.1',8083))
    server.listen(5)
    server.setblocking(False)     #1
    print('starting...')
    
    
    rlist=[]   #链接套接字加到rlist里 ["链接类型","协议","ip,port"]
    wlist=[]
    while True:
    
        try:
            conn, addr = server.accept()
            rlist.append(conn)
            print(rlist)
        except BlockingIOError:  # 检测BlockingIOError
            # print('干其他的活')
    
            #收消息
            del_rlist = []
            for conn in rlist:  #遍历套接字,有消息过来。就继续下一步,
            # 没消息过来就交conn添加到del_rlist,再去通过del_list列表remove掉rlist里的conn
                try:
                    data=conn.recv(1024)
                    if not data:
                        del_rlist.append(conn)
                        continue
                    wlist.append((conn,data.upper()))
                except BlockingIOError:  # 检测BlockingIOError
                    continue
                except Exception:
                    conn.close()
                    del_rlist.append(conn)
    
            #发消息
            del_wlist=[]
            for item in wlist:
                try:
                    conn=item[0]
                    data=item[1]
                    conn.send(data)
                    del_wlist.append(item)
                except BlockingIOError:
                    pass
    
            for item in del_wlist:
                wlist.remove(item)
    
            for conn in del_rlist:
                rlist.remove(conn)
    
    
    server.close()

    客户端

    from socket import *
    
    client=socket(AF_INET,SOCK_STREAM)
    client.connect(('127.0.0.1',8080))
    
    
    while True:
        msg=input('>>: ').strip()
        if not msg:continue
        client.send(msg.encode('utf-8'))
        data=client.recv(1024)
        print(data.decode('utf-8'))
    
    client.close()
  • 相关阅读:
    easyUI日期框,默认显示今天,今天以后的日期不能选
    vue实现下拉框全选和输入匹配
    【转载】CSS flex属性深入理解
    ES6学习之二
    Centos7(Firewall)防火墙命令
    DeDeCMS模板标签(2)
    DeDeCMS模板标签(1)
    常用js正则表达式大全
    linux yum 命令
    Linux软链接和硬链接
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/9849665.html
Copyright © 2020-2023  润新知