码迷,mamicode.com
首页 > 编程语言 > 详细

Python随心记--阻塞IO server

时间:2019-01-26 23:43:25      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:int   dal   end   hello   异步   水平   sel   div   file   

阻塞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(bhello 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))

 

Python随心记--阻塞IO server

标签:int   dal   end   hello   异步   水平   sel   div   file   

原文地址:https://www.cnblogs.com/Essaycode/p/10325260.html

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