zoukankan      html  css  js  c++  java
  • select


    import select
    import socket
    import queue


    server = socket.socket()
    server.bind(('localhost',9000))
    server.listen(1000)


    server.setblocking(False) #不阻塞

    msg_dic = {}

    inputs = [server,]
    #inputs = [server,conn] #[conn,]
    #inputs = [server,conn,conn2] #[conn2,]
    outputs = [] #
    #outputs = [r1,] #
    while True:
    readable ,writeable,exceptional= select.select(inputs, outputs, inputs )
    print(readable,writeable,exceptional)
    for r in readable:
    if r is server: #代表来了一个新连接
    conn,addr = server.accept()
    print("来了个新连接",addr)
    inputs.append(conn) #是因为这个新建立的连接还没发数据过来,现在就接收的话程序就报错了,
    #所以要想实现这个客户端发数据来时server端能知道,就需要让select再监测这个conn
    msg_dic[conn] = queue.Queue() #初始化一个队列,后面存要返回给这个客户端的数据
    else: #conn2
    data = r.recv(1024)
    print("收到数据",data)
    msg_dic[r].put(data)

    outputs.append(r) #放入返回的连接队列里
    # r.send(data)
    # print("send done....")

    for w in writeable: #要返回给客户端的连接列表
    data_to_client = msg_dic[w].get()
    w.send(data_to_client) #返回给客户端源数据

    outputs.remove(w) #确保下次循环的时候writeable,不返回这个已经处理完的连接了

    for e in exceptional:
    if e in outputs:
    outputs.remove(e)

    inputs.remove(e)

    del msg_dic[e]


    #======================

    import socket

    HOST = 'localhost' # The remote host
    PORT = 9000 # The same port as used by the server
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((HOST, PORT))
    while True:
    msg = bytes(input(">>:"), encoding="utf8")
    s.sendall(msg)
    data = s.recv(1024)

    #
    print('Received', data)
    s.close()


    http://www.cnblogs.com/alex3714/articles/5248247.html
  • 相关阅读:
    微服务
    JNDI Tomcat
    JNDI
    依赖倒置原则
    mac下为gdb创建证书赋权其调试其它应用
    sed相关
    关于autoconf
    mac相关
    about gnu bash shell
    关于gcc
  • 原文地址:https://www.cnblogs.com/rongye/p/9985271.html
Copyright © 2011-2022 走看看