我需要清除套接字缓冲区,以使其内部没有所有的套接字“ log”。 我只需要处理最新请求中的最新回复即可。
我正在使用一个函数来接收所有数据。 我知道我应该以某种方式清空该函数中的套接字缓冲区,但是找不到我可以做到这一点的方法。
def recv_timeout(the_socket, timeout=2):
# делаем сокет не блокируемым
the_socket.setblocking(0)
total_data = []
data = ''
begin = time.time()
while 1:
if total_data and time.time() - begin > timeout:
break
elif time.time() - begin > timeout * 2:
break
try:
data = the_socket.recv(8192)
if data:
total_data.append(data)
begin = time.time()
else:
time.sleep(0.1)
except:
pass
return b''.join(total_data)
当我发送如下请求时:
client_socket.sendall('list\r\n'.encode("utf-8"))
我收到我的要求的正常答复。 但是当我做
client_socket.sendall('recv 1\r\n'.encode("utf-8"))
在上次请求之后,我立即得到答案1 +答案2,但是我只需要答案2。
非常感谢!
答案 0 :(得分:1)
TCP套接字是流。您所能做的就是阅读已收到的所有内容。这意味着如果您的程序就像
send req1
receive and process answer1
send req2
receive and process answer2
一切都很好。
但是你是吗?
send req1
send req2
那你就要做
receive answer1
receive and process answer2