Python recv()继续返回相同的数据
我正在研究一个简单的异步HTTP代理。 我编写此函数是为了接收所有数据(因为我不知道接收数据的具体大小): 这段代码工作得很好,但在我的测试中,我注意到循环从未结束,并且不断地接收相同的数据(特别是“301永久移动…”)。 这是recv()非常奇怪的行为。 可能这不是从套接字接收所有数据的最佳方式,但我想不出对此行为的任何解释。以下几行:Python recv()继续返回相同的数据,python,sockets,select,python-3.x,recv,Python,Sockets,Select,Python 3.x,Recv,我正在研究一个简单的异步HTTP代理。 我编写此函数是为了接收所有数据(因为我不知道接收数据的具体大小): 这段代码工作得很好,但在我的测试中,我注意到循环从未结束,并且不断地接收相同的数据(特别是“301永久移动…”)。 这是recv()非常奇怪的行为。 可能这不是从套接字接收所有数据的最佳方式,但我想不出对此行为的任何解释。以下几行: data += sock.recv(65535) if not data: # if empty break 应更改: chunk = sock.
data += sock.recv(65535)
if not data: # if empty
break
应更改:
chunk = sock.recv(65535)
if not chunk:
break
data += chunk
否则将检查累积数据,而不是刚刚接收到的数据;如果接收到任何数据,就会导致无休止的循环
chunk = sock.recv(65535)
if not chunk:
break
data += chunk