python黑帽子第二章的小疑问

第二章 取代netcat

一开始对于下面这段代码不是太理解:

 1 def client_sender(buffer):
 2     ...
 3         
 4         while True:
 5             len_recv = 1
 6             response = ""
 7    
 8             while len_recv:
 9                 data = client.recv(4096)
10                 len_recv = len(data)
11                 response += data
12         
13                 if len_recv < 4096:  # 不太懂这里为什么要这样做
14                     break
15 
16             print(response)
17     ...

 

之后在网上查询了关于socket.recv函数的详细说明:

recv先检查套接字s的接收缓冲区,如果s接收缓冲区中没有数据或者协议正在接收数据,那么recv就一直等待,直到协议把数据接收完毕。当协议把数据接收完毕,recv函数就把s的接收缓冲中的数据copy到buf中(注意协议接收到的数据可能大于buf的长度,所以在这种情况下要调用几次recv函数才能把s的接收缓冲中的数据copy。recv函数仅仅是copy数据,真正的接收数据是协议来完成的),recv函数返回其实际copy的字节数。

因此上面的判断就是在判断数据是否接受完毕,如果接收完毕就退出循环,打印收到的消息。

posted @ 2017-10-20 20:57  uaretheboss  阅读(302)  评论(0编辑  收藏  举报