我正在关注有关客户端/服务器的官方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!”
因此我的问题是:实际发送在哪里?如何做到像上面这样的事情?
答案 0 :(得分:0)
LineReceiver具有行结束分隔符变量。默认情况下为'\r\n'
。因此协议在实际将数据写入套接字之前一直等到它看到分隔符。
raw_input()从输入中删除尾随的新行,因此协议永远不会看到分隔符。
因此,请尝试在命令后发送新行'\ r \ n'或将其附加到command
变量。