python twisted的transport.write从不发送数据

0 投票
1 回答
944 浏览
提问于 2025-04-17 16:14

我有一个服务器,它是基于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 个回答

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)

现在它就神奇地工作了!真是让人感到无比简单却又让人沮丧。

撰写回答