如何清除套接字缓冲区以从最新请求中获取最新数据

How to clear socket buffer to get the latest data from the latest request

我需要清除套接字缓冲区,以免其中包含所有套接字 "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。

非常感谢!

TCP 套接字是一个流。您所能做的就是阅读已经收到的所有内容。这意味着如果你的程序是

send req1
receive and process answer1
send req2
receive and process answer2

一切都应该没问题。

但是你这样做了吗:

send req1
send req2

那么你将不得不做

receive answer1
receive and process answer2