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

非阻塞IO模板

时间:2018-10-25 15:43:57      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:print   inpu   stream   nbsp   err   127.0.0.1   import   rip   协议   

服务端

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()

 

非阻塞IO模板

标签:print   inpu   stream   nbsp   err   127.0.0.1   import   rip   协议   

原文地址:https://www.cnblogs.com/anzhangjun/p/9849665.html

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