文本未在Twisted中发送

时间:2013-09-24 13:13:21

标签: python client-server twisted twisted.internet

我正在关注有关客户端/服务器的官方Twisted examples。我正在使用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!

因此我的问题是:实际发送在哪里?如何做到像上面这样的事情?

1 个答案:

答案 0 :(得分:0)

LineReceiver具有行结束分隔符变量。默认情况下为'\r\n'。因此协议在实际将数据写入套接字之前一直等到它看到分隔符。

raw_input()从输入中删除尾随的新行,因此协议永远不会看到分隔符。

因此,请尝试在命令后发送新行'\ r \ n'或将其附加到command变量。