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!")

我可以看到“正在发送... ”和“已发送”,但仅此而已。即使客户端似乎正在发送数据,服务器也没有收到任何信息。如果我输入“断开连接”,所有内容都会立即发送,包括“你好,世界!'

因此我的问题是:实际发送发生在哪里?以及如何实现上述目标?

4

1 回答 1

0

LineReceiver具有行尾分隔符变量。默认情况下是'\r\n'. 因此,协议会一直等到它看到分隔符,然后再将数据实际写入套接字。

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

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

于 2013-09-24T13:54:18.457 回答