• Python随心记--阻塞IO server


    阻塞IO server
    import socket
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    
    while 1:
        conn,addr = sk.accept()
        while 1:
            conn.send('hello client'.encode('utf8'))
            data = conn.recv(1024)
            print(data.decode('utf8'))
    
    #client
    import socket
    
    sk = socket.socket()
    
    sk.bind(('127.0.0.1',8080))
    
    while 1:
        data = sk.recv(1024)
        print(data.decode('utf8'))
        sk.send(b'hello server')
    非阻塞IO server
    import time,socket
    
    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sk.bind(('127.0.0.1',6667))
    sk.listen(5)
    sk.setblocking(False)
    while True:
        try:
            print('waiting client connection........')
            connection,addr = sk.accept()
            print('+++',addr)
            client_message = connection.recv(1024)
            print(str(client_message,'utf8'))
            connection.close()
        except Exception as e:
            print(e)
    #client
    import time,socket
    sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
    while True:
        sk.connect(('127.0.0.1',6667))
        print('hello')
        sk.sendall(bytes('hello','utf8'))
        time.sleep(2)
        break
    IO多路复用select监听 sewrver
    #优势:可以监听多个连接
    import socket,select
    sk = socket.socket()
    sk.bind(('127.0.0.1',9904))
    sk.listen(5)
    inp = [sk,] 
    while True:
        r,w,e = select.select(inp,[],[],5)
        for i in r:
            conn,addr = i.accept()
            print('hello')
            inp.append(conn)
        print('>>>>>>')
    
    #client
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',9904))
    
    while 1:
        inp = input('>>>:').strip()
        sk.send(inp.encode('utf8'))
        data = sk.recv(1024)
        print(data.decode('utf8'))
    select触发方式
    #水平触发
    #边缘触发

    异步IO :全程无阻塞

    selectors模块介绍
    import selectors,socket
    sel = selectors.DefaultSelector()
    def accept(sock,mask):
        conn,addr = sock.accept()
        print('accept',conn,'from',addr)
        conn.setblocking(False)
        sel.register(conn,selectors.EVENT_READ,read)
    
    def read(conn,mask):
        data = conn.recv(1000)
        if data:
            print('echoing',repr(data),'to',conn)
            conn.send(data)
        else:
            print('closing',conn)
            sel.unregister(conn)
            conn.close()
    
    sock = socket.socket()
    sock.bind(('localhost',8090))
    sock.listen(100)
    sock.setblocking(False)   #设置非阻塞
    sel.register(sock,selectors.EVENT_READ,accept)
    
    while True:
        events = sel.select()
        for key,mask in events:
            callable = key.data
            callable(key.fileobj,mask)
    
    #client
    import socket
    sk = socket.socket()
    sk.connect(('127.0.0.1',8090))
    
    while 1:
        inp = input('>>>:').strip()
        sk.send(inp.encode('utf8'))
        data = sk.recv(1024)
        print(data.decode('utf8'))
  • 相关阅读:
    博客园的界面设置
    ARM 汇编指令集
    winfroms更换皮肤
    面向对象的七项设计原则
    S2-01
    机票查询与订购系统
    重点语法
    第二章
    一、17.09.13
    习作
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10325260.html
Copyright © 2020-2023  润新知