【问题标题】:Infinite loop when decoding a message received from a Socket in Python 3.3.5解码从 Python 3.3.5 中的套接字接收到的消息时的无限循环
【发布时间】:2015-09-02 19:27:03
【问题描述】:

我正在使用这行代码来解码从 Python 中的 Socket 接收到的字符串,但是当我运行程序时,这行代码会无限运行,并且只是在 Python shell 中显示为闪烁的光标:

received = self.sock.recv(16).decode()

如果您知道如何修复它,我们将不胜感激!

【问题讨论】:

  • 这真的不足以发现任何问题。另外,使用正确的代码格式。
  • 您是否尝试从它所连接的服务器发送任何数据,或者它们都坐在那里?

标签: python sockets loops decode infinite


【解决方案1】:

它不是无限循环的。它只是阻塞了 recv 调用,因为没有足够的数据可以读取。您已请求读取 16 个字节,recv 将阻塞直到 16 个字节可用 - 而您的套接字还没有 16 个字节。

尝试使用较低的值 - 甚至更好 - 使套接字非阻塞。 编写非阻塞套接字读取需要更多的工作 - 因此,如果您确切知道要读取多少字节,最好将确切的数字提供给 read()。

如果没有,请在非阻塞套接字上查看此答案。答案有两种不同的方法。

What does Python's socket.recv() return for non-blocking sockets if no data is received until a timeout occurs?

【讨论】:

    最近更新 更多