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

Python网络编程笔记二

时间:2017-06-17 12:06:58      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:remove   color   inpu   tab   连接   class   客户端连接   epoll   str   

 使用select模块实现IO多路复用服务端

 

 1 import socket
 2 import select
 3 #windows上只支持select.select,不支持poll epoll
 4 
 5 HOST = "127.0.0.1"
 6 PORT = 9999
 7 BUFFSIZE = 1024
 8 ADDR = (HOST, PORT)
 9 #创建服务器端监听套接字
10 tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
11 tcpSocket.bind(ADDR)
12 tcpSocket.listen(5)
13 tcpSocket.setblocking(0)
14 
15 
16 #监听读事件
17 inputs = [tcpSocket]
18 #监听写事件
19 outputs = []
20 #监听异常事件
21 exceptions = []
22 
23 while True:
24     #每当有客户端连接时,返回的r_list中包含监听的服务器套接字tcpSocket
25     r_list, w_list, e_list = select.select(inputs, outputs, exceptions, 1)
26     print(len(inputs))
27     for r in r_list:
28         if r == tcpSocket:
29             request, addr = r.accept()
30             request.setblocking(0)
31             #将客户端套接字加入到监听列表中,接下来每当客户端发送数据过来,r_list中即可包含该套接字
32             inputs.append(request)
33         #如果套接字不等于tcpSocket,说明是客户端发送数据
34         else:
35             try:
36                 dataBytes = r.recv(1024)
37                 dataStr = str(dataBytes, encoding="utf-8")
38                 print("接收到来自", r.getpeername(), " : ", dataStr)
39                 r.sendall(bytes("已经收到您发送的" + dataStr, encoding="utf-8"))
40             #说明客户端断开连接
41             #ConnectionResetError
42             except Exception as e:
43                 #将客户端套接字移除出监听列表
44                 inputs.remove(r)
45                 r.close()
46 tcpSocket.close()

 

Python网络编程笔记二

标签:remove   color   inpu   tab   连接   class   客户端连接   epoll   str   

原文地址:http://www.cnblogs.com/xhcdream/p/7039724.html

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