python select方法的使用

服务端

 1 import socket
 2 import select   #同步io
 3 sock = socket.socket()
 4 sock.bind(("127.0.0.1",8000))
 5 sock.listen(5)
 6 sock.setblocking(False) #非阻塞链接(False)
 7 inputs = [sock,]
 8 while True:
 9        a, b, c = select.select(inputs, [], [])  #监控(sock连接以及收发内核态存储的数据)
10     for obj in a:
11         if obj == sock:
12             conn, addr = obj.accept()
13             inputs.append(conn)
14             print(conn)
15 
16         else:
17             while True:  # 通信循环,
18                 #解决有多个client端同时连接,若其中一个捣蛋关闭己端连接,那么对端跟着被中断
19                 try:
20                     data = obj.recv(1024)
21                     print(data.decode('utf-8'))
22                     send_data = input(">>>")
23                     if len(send_data) == 0: break
24                     obj.send(send_data.encode('utf-8'))
25 
26                 except Exception as e:
27                     break

 

  #select()的都是基于单线程的并发操作(非阻塞的socket连接)
    #select()方法接收并监控3个通信列表, 第一个是所有的输入的data,就是指外部发过来的数据,
    # 第2个是监控和接收所有要发出去的data(outgoing data),
    # 第3个监控错误信息,接下来我们需要创建2个列表来包含输入和输出信息来传给select().
    #监控客户端发来的连接跟 监听io的读写

客户端

1 import socket
2 sock = socket.socket()
3 sock.connect(("127.0.0.1",8000))
4 while True:
5     send_data = input(">>>")
6     sock.send(send_data.encode('utf-8'))
7     recv_data = sock.recv(1024)
8     print(recv_data.decode('utf-8'))

 

posted @ 2017-05-10 15:23  福临  阅读(2270)  评论(0编辑  收藏  举报