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 で提案されているように、これと現在のチェックの両方を 1 つに組み合わせることができます。

if not data or 'exit' in data: 

チャネルが閉じられている場合、これはループを終了します。

于 2012-11-06T17:03:21.757 に答える