1

我正在用 python 创建一个聊天服务器,并且在该语言中已经是一个菜鸟了。我目前有 1 个问题,我想在进一步解决之前解决,但我似乎无法找到解决问题的方法。

这是一个持续的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

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

我哪里错了?

4

1 回答 1

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: 

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

于 2012-11-06T17:03:21.757 回答