第二章 取代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的字节数。
因此上面的判断就是在判断数据是否接受完毕,如果接收完毕就退出循环,打印收到的消息。