0

我试图修补 Twisted,看看它是怎么回事。所以我买了 Jessica McKellar 和 Abe Fettig 的书“Twisted”, 2nd Edition,下载并安装了 Python、Twisted 和 zope.interface,并尝试从第 12 页输入并运行他们的第一个示例:

from twisted.internet import reactor, protocol

class EchoClient(protocol.Protocol):
    def connectionMade(self):
        self.transport.write("Hello, Stupid!")

    def dataReceived(self, data):
        print "Server said: ", data
        self.transport.loseConnection()

class EchoFactory(protocol.ClientFactory):
    def BuildProtocol(self, addr):
        return EchoClient()

    def clientConnectionFailed(self, connector, reason):
        print "Connection Failed."
        reactor.stop()

    def clientConnectionLost(self, connector, reason):
        print "Connection lost."
        reactor.stop()

reactor.connectTCP("localhost", 8000, EchoFactory())
reactor.run()

也有一个服务器部分。我运行了服务器程序,然后在另一个 cmdline 窗口中运行了客户端程序(上图)。它产生了:

"Unhandled Error
Traceback..  (several lines - see attached screen-capture (oops - this won't let me attach images!)

文件“C:\Python27\lib\site-package\twisted\python\context.py”,第 81 行,在 callWithContext --- --- 文件“C:\Python27\lib\site-packages\twisted\internet\ selectreactor.py”,第 151 行,在 _doReadOrWrite why = getattr(selectable, method)() 文件“C:\Python27\lib\site-packages\twisted\internet\tcp.py”,第 593 行,在 doConnect self._connectDone () .. exceptions.TypeError: 'NoneType' 对象不可调用。连接失败。

如果我是 Python 专家,问题可能对我来说会更清楚,但我对它相当陌生——来自 C#、F#、C++ 背景。

您认为可能是什么原因造成的 - 有没有其他人遇到过这个问题?令人沮丧 - 如果我什至无法运行第一个完全微不足道的示例,我不能说这是一项简单的技术!

我正在使用 Windows 8 x64、Python 2.7.5、Twisted 13.0.0(安装程序是 Twisted-13.0.0.win-amd64-py2.7.msi),并且我已经添加了我的 python (C:\Python27 ) 和 PATH 环境变量的脚本。

4

1 回答 1

2

我在这里盲目射击,但我认为问题在于一个小错字 - 而不是BuildProtocol,它应该是buildProtocol。当EchoFactory实例尝试返回新的协议实例时出现错误 - 它返回None而不是EchoClient实例,这None以后很麻烦。

于 2013-06-17T14:49:44.563 回答