python扭曲的transport.write从不发送数据



我有一个服务器,它松散地基于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("%sn" % 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()

好。我希望这能帮助其他人。我上面的问题是我的服务器(使用lineReceived):

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

应为回车AND换行。因此,通过将我上面的sendMessage更改为:

    def sendMessage(self, msg):
        self.transport.write("%srn" % msg)

它现在神奇地工作了!简单得令人沮丧。

相关内容

最新更新