第二章 取代netcat 一開始對於下麵這段代碼不是太理解: 之後在網上查詢了關於socket.recv函數的詳細說明: recv先檢查套接字s的接收緩衝區,如果s接收緩衝區中沒有數據或者協議正在接收數據,那麼recv就一直等待,直到協議把數據接收完畢。當協議把數據接收完畢,recv函數就把s的接收 ...
第二章 取代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的位元組數。
因此上面的判斷就是在判斷數據是否接受完畢,如果接收完畢就退出迴圈,列印收到的消息。