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

时间:2019-05-17 12:14:30

标签: python sockets tcp pop3

我需要清除套接字缓冲区,以使其内部没有所有的套接字“ 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。

非常感谢!

1 个答案:

答案 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