zoukankan      html  css  js  c++  java
  • socket机制下实现的多用户与服务器交互

    import select  #IO操作中的监听(一种)
    import socket #服务与客户端的交互
    sock =socket.socket()
    sock.bind(('127.0.0.1',8083))
    sock.listen(5)
    sock.setblocking(False) #对于socket是否有链接,都进行无阻塞,
    my_inp =[sock ,] #建立一个列表,把该列表放到select.select()中,就会让它
    #变成监听列表
    while True:
    r,w,e =select.select(my_inp,[],[]) #监听my_inp列表中的元素是否被触动,
    # 并把被触动的元素赋值给r
    for obj in r:
    if obj == sock:
    print('sock',obj) #当客户端链接服务端时,就会触动sock,注意他们是基于tcp协议
    conn,addr =obj.accept()#建立客户端与服务端的连接
    print('conn ',conn) #conn是服务端到客户端的套接字(管道)
    my_inp.append(conn) #把conn加入到监听列表中,当conn收到信息或是断开时,
    # 都会触动conn

    else:
    try: #捕捉try中的代码是否异常,如果异常,即执行except,如果没有异常
    #就执行else中的
    data =obj.recv(1024) #接收到客户端的信息
    except Exception as e:
    my_inp.remove(obj) #conn断开时,把它从监听列表中删除
    continue
    else: #如果执行try中的程序没有异常,就会执行它中的代码
    print(data.decode('utf-8'))
    my_data =input('>>>:').strip()
    obj.send(my_data.encode('utf-8'))

    #如果是在Linux系统中,conn断开,data =obj.recv(1024),则data收到的信息是空
    #即if not data:
    # my_inp.remove(obj)
    # continue
  • 相关阅读:
    vfio
    render
    数据库分类
    git 随笔
    js自定义弹窗
    bootstrap学习笔记<十一>(导航条)
    bootstrap学习笔记<十>(按钮组,导航)
    bootstrap学习笔记<九>(菜单,按钮。导航基本元素)
    bootstrap学习笔记<八>(bootstrap核心布局风格——栅格系统)
    bootstrap学习笔记<七>(图标,图像)
  • 原文地址:https://www.cnblogs.com/IQ-Python/p/6845808.html
Copyright © 2011-2022 走看看