解码从Python 3.3.5中的Socket接收的消息时的无限循环

时间:2015-06-17 13:52:03

标签: python sockets loops decode infinite

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

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

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

1 个答案:

答案 0 :(得分:1)

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

尝试使用较低的值 - 甚至更好 - 使套接字无阻塞。 编写非阻塞套接字读取工作要多一些 - 所以如果你确切地知道要读取多少字节,最好给出读取()的确切数字。

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

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