【问题标题】:How to flush/clear buffer in a socket in python3如何在python3的套接字中刷新/清除缓冲区
【发布时间】:2020-03-30 09:59:36
【问题描述】:

如何在 python3 中刷新套接字?

我想做这样的事情

def clear_buffer(sock):
    try:
        while sock.recv(1024): pass
    except:
        pass

def clear_buffer(sock):
    while True:
        data = sock.recv(1024)
        if not data:
            break

在尝试运行这两个函数后,似乎都没有打破 while 循环和/或从传入数据中清除套接字。当套接字停止接收数据时,我如何有条件地做某事?

【问题讨论】:

  • 也许你应该在等待数据太久或停止等待数据时使用超时来引发错误 - settimeout。或者你应该使用模块select检查是否有数据,然后再使用read()
  • 我通过发送一个包含字符的标志来解决这个问题,以便在套接字完成发送数据时中断 while 循环。不过,我宁愿不这样做,这样我就不必在流式传输数据等时设置标志。

标签: python python-3.x sockets networking


【解决方案1】:
        while run_network:
            recv = True
            data = b''


            try:
                while recv:
                    try:
                        packet = socket.recv(10240)
                        if packet:
                            data += packet
                        else:
                            recv = False
                        try:
                            pickle.loads(data)
                            recv = False
                        except:
                            recv = True

                    except ConnectionResetError:
                       
                            print(f"{client} has disconnected........")
                            break
                    except ConnectionError:
                     **strong text**
                            print(f"{client}has a Connection Error.....")
                            break

【讨论】:

  • 你能提供一个解释,而不是仅仅包括代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-07
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多