首页 > 其他 > 详细

非阻塞IO

时间:2017-09-01 19:30:22      阅读:254      评论:0      收藏:0      [点我收藏+]
服务端
from socket import *
import time
server = socket(AF_INET,SOCK_STREAM)
server.bind((‘127.0.0.1‘,8081))
server.listen(3)
server.setblocking(False)      #accept变为非阻塞状态,
print(‘server startting...‘)
conn_l = []       #存放原始数据
del_l = []     #存放错误的数据
while True:               #链接循环
    try:
        print(‘=====>‘,conn_l)    #链接地址
        conn,addr = server.accept()    #如果没有异常处理立马抛出错误    conn是链接,可以收发消息
        # print(addr)
        conn_l.append(conn)
    except BlockingIOError:   #收不到数据干这里的
        time.sleep(4)   #休眠两秒,继续
        for conn in conn_l:    #再次循环列表中的conn
            try:
                data = conn.recv(1024)
                conn.send(data.upper())
            except BlockingIOError:
                pass
            except ConnectionResetError:
                del_l.append(conn)  #错误的conn添加到del_l
        for obj in del_l:
            obj.close()      #和conn.close   一样,只是换了个名字
            conn_l.remove(obj)       #将那个错误的obj直接从元列表删除
        del_l = []            #清空列表    清空之后下次还可以接收,删除了就没地方存放他的值
        continue
#新建一个存放错误值的列表,然后


客户端
from socket import *
client = socket(AF_INET,SOCK_STREAM)
client.connect((‘127.0.0.1‘,8081))
while True:
    msg = input(‘p;ease:‘).strip()
    if not msg:continue
    client.send(msg.encode(‘utf-8‘))
    data = client.recv(1024)
    print(data.decode(‘utf-8‘))

  

非阻塞IO

原文:http://www.cnblogs.com/52-qq/p/7464679.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!