我正在用python创建聊天服务器,并且在语言上还算是新手。我目前有一个要解决的问题,再进一步解决,但似乎找不到解决问题的方法。

这大约是一个while循环,继续。

在下面的代码是哪里出了问题

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


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

我要去哪里错了?

最佳答案

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

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

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

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


或者,按照@ sr2222的建议,您可以将此和当前检查合并为一个:

if not data or 'exit' in data:


如果通道已关闭,则将退出循环。

关于python - 卡在while循环python中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13255769/

10-14 18:11
查看更多