python twisted transport.write从不发送数据

时间:2013-02-18 04:16:16

标签: python twisted.client

我有一个松散地基于Twisted示例聊天服务器的服务器。它适用于telnet。现在我想要一个客户端连接到它。我复制了一次性客户端示例。问题是服务器永远不会收到应该启动“对话”的“hello”字符串。我在常见问题中读到了一个常见的错误是阻止反应堆运行但我无法在下面的代码中看到我可以做到这一点。谁能告诉我有什么问题?

from twisted.internet import reactor
from twisted.internet.protocol import Factory, Protocol
from twisted.internet.endpoints import TCP4ClientEndpoint

class Greeter(Protocol):
    def sendMessage(self, msg):
        self.transport.write("%s\n" % msg)

class GreeterFactory(Factory):
    def buildProtocol(self, addr):
        return Greeter()

def gotProtocol(p):
    p.sendMessage("hello")
    reactor.callLater(1, p.sendMessage, "/p2")
    reactor.callLater(2, p.transport.loseConnection)

point = TCP4ClientEndpoint(reactor, "localhost", 8123)
d = point.connect(GreeterFactory())
d.addCallback(gotProtocol)
reactor.run()

1 个答案:

答案 0 :(得分:2)

行。我希望这有助于其他人。我上面的问题是我的服务器(使用了lineReceived):

    def lineReceived(self, line):
        print "line received: %s" % line
        if self.state == "GETNAME":
            self.handle_GETNAME(line)
        else:
            self.handle_CHAT(line)

预计回车和换行。所以通过将上面的sendMessage更改为:

    def sendMessage(self, msg):
        self.transport.write("%s\r\n" % msg)

它现在神奇地工作!如此令人沮丧的简单。