0

クライアント/サーバーに関する公式の Twistedの例に従っています。LineReceiver.sendLine()を使用して、クライアントからサーバーにテキストを送信しています。このコードは機能します:

def connectionMade(self):
    self.sendLine("Hello, world!")

サーバー側で見ることができます。しかし、次のようなものを追加すると:

def connectionMade(self):
    while self.running:
        command = raw_input(">>")
        if command=="disconnect":
            self.running = False
        else:
            print "sending..."
            self.sendLine(command)
            print "sent."
    self.sendLine("Hello, world!")

「送信中...」と「送信済み」の両方が表示されますが、それ以上は表示されません。クライアントがデータを送信しているように見えても、サーバーは何も受信しません。「disconnect 」と入力すると、「 Hello, world!」を含むすべてが一度に送信されます。'

したがって、私の質問: 実際の送信はどこで行われますか? そして、上記のようなことを達成するにはどうすればよいでしょうか?

4

1 に答える 1

0

LineReceiverには、行末区切り変数があります。デフォルトでは です'\r\n'。したがって、プロトコルは、実際にデータをソケットに書き込む前に、デリミタが表示されるまで待機します。

raw_input()は入力から末尾の改行を削除するため、プロトコルは区切り文字を認識しません。

したがって、コマンドの後に改行 '\r\n' を送信するか、command変数に追加してみてください。

于 2013-09-24T13:54:18.457 に答える