Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python recv()继续返回相同的数据_Python_Sockets_Select_Python 3.x_Recv - Fatal编程技术网

Python 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.

我正在研究一个简单的异步HTTP代理。 我编写此函数是为了接收所有数据(因为我不知道接收数据的具体大小):

这段代码工作得很好,但在我的测试中,我注意到循环从未结束,并且不断地接收相同的数据(特别是“301永久移动…”)。 这是recv()非常奇怪的行为。 可能这不是从套接字接收所有数据的最佳方式,但我想不出对此行为的任何解释。

以下几行:

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