码迷,mamicode.com
首页 > 其他好文 > 详细

非阻塞IO

时间:2017-09-01 19:37:04      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:encode   接收   move   lock   while   imp   rem   put   出错   

服务端
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

标签:encode   接收   move   lock   while   imp   rem   put   出错   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!