<p>感谢您的及时回答,以及宝贵的建议,正如我在帖子中所说的,我对python还不熟悉,但已经准备好改进自己了</p>
<p>我已经分析了你们的变化,我开始理解原理,但有一件事我不明白:打电话给工厂<strong>\u init</strong>(self),而且这一行生成了一个错误,我将它们更改为ControllerFactory。<strong>init</strong>(self),最后我将其删除。我添加了一些遗漏的初始化,它可以工作,非常感谢:)</p>
<p>下面是我希望它按我的方式工作的最终代码</p>
<p><strong>controller.py</strong></p>
<pre><code>class Controller(object):
def __init__(self, port):
# Don't set self.nodes as a class attribute or it is shared across all instances
self.port = port
self.nodes = []
# Don't just use a local for SimpleServer, keep a reference on an attribute. Also, pass the controller instance in.
self.ss = SimpleServer(port, self)
</code></pre>
<p><strong>server.py</strong></p>
<pre><code>class MyServerProtocol(Protocol):
def connectionMade(self):
# Get the reference to the Controller instance.
ctrl = self.factory.server.controller
# Use it.
ctrl.nodes.append(self.transport.getPeer())
class ControllerFactory(Factory):
# Set this class attribute so the inherited buildProtocol does the work for us, including setting the factory attribute.
protocol = MyServerProtocol
def __init__(self, server):
# Save a reference to the given server as an attribute on the instance.
self.server = server
#ControllerFactory.__init__(self)
class SimpleServer():
def __init__(self, port, controller):
self.port = port
self.controller = controller
# Pass a reference to the SimpleServer instance to the ControllerFactory
reactor.listenTCP(self.port, ControllerFactory(self))
print 'server listening on %d' %port
reactor.run()
</code></pre>
<p><strong>主程序</strong></p>
<pre><code>if __name__ == '__main__':
port = 9123
ctrl = Controller(port)
</code></pre>
<p><strong>客户端</strong></p>
<pre><code>class myClientProtocol(Protocol):
def dataReceived(self, data):
print ("data received", data)
class myClientFactory(ClientFactory):
def buildProtocol(self, addr):
print 'Connected.'
return myClientProtocol()
if __name__ == '__main__':
print "CLIENT : connecting to : [ 127.0.0.1 ] on [ 9123 ]\n"
reactor.connectTCP('127.0.0.1',9123, myClientFactory())
reactor.run()
</code></pre>
<ul>
现在我来考虑一下你的最后一句话。<李>
</ul>