卡在循环python中

时间:2012-11-06 16:58:04

标签: python while-loop

我正在python中创建一个聊天服务器,并且在该语言中获得了相当远的菜鸟。在我走得更远之前,我现在有一个问题需要解决,但我似乎无法找到如何解决问题。

这是一个持续的循环..

在下面的代码中是出错的地方

while 1:
    try:
        data = self.channel.recv ( 1024 )
        print "Message from client: ", data
        if "exit" in data:
            self.channel.send("You have closed youre connection.\n")
            break
    except KeyboardInterrupt:
        break
    except:
        raise

当这段代码被执行时,在我的客户端上我需要输入“exit”退出连接。这可以作为一个魅力,但当我使用CTRL + C退出连接时,我的服务器打印“来自客户端的消息:”几千次。

我哪里错了?

1 个答案:

答案 0 :(得分:4)

您在客户端按Ctrl-C。这会导致服务器的self.channel关闭。

由于在封闭通道上调用recv()会立即返回一个空白字符串,因此您的服务器代码会陷入无限循环。

要解决此问题,请将以下行添加到服务器代码中:

data = self.channel.recv ( 1024 )
if not data: break # <<< ADD THIS

或者,正如@ sr2222所建议的那样,您可以将这个和当前的支票合并为一个:

if not data or 'exit' in data: 

如果频道已经关闭,这将退出循环。