I need to write a gateway server that forwarding data between client and data server¡£I use a Protocol instance for incoming connection from client, and creating another Protocol instance to connect data server when received data from client:<br>
<br>Exp.1<br>...<br>Class ToClientProtocol(Protocol):<br>&quot;&quot;&quot; Protocol for incoming connection from client. &quot;&quot;&quot;<br>&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def connectionMade(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.data_server = reactor.connectTCP(&#39;localhost&#39;, 8888, DataServerFactory())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # make connection to data server<br>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.data_server.transport.write(&#39;hello!&#39;) &nbsp; &nbsp; &nbsp; &nbsp; # send a message to data server, but not work<br>...<br><br>The connetion to data server can be made, BUT the data server received nothing. self.data_server.transport.write() not work.<br>
<br>It will work if I write like that:<br>Exp. 2 <br>...<br>Class ToClientProtocol(Protocol):<br>
&quot;&quot;&quot; Protocol for incoming connection from client. &quot;&quot;&quot;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; def connectionMade(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.data_server = reactor.connectTCP(&#39;localhost&#39;, 8888, DataServerFactory(self))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # make connection to data server<br>
&nbsp;&nbsp;&nbsp; <br>
Class DataServer(Protocol):<br>&quot;&quot;&quot; Protocol for connection to data server. &quot;&quot;&quot;<br><br>&nbsp;&nbsp;&nbsp; def __init__(self, client):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.client = client<br><br>&nbsp;&nbsp;&nbsp; def connectionMade(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.client.data_server.transport.wirte(&#39;hello!&#39;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # send message to data server, it&#39;s work now!<br><br>Class DataServerFactory(self):<br><br>&nbsp;&nbsp;&nbsp; def __init__(self, client):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.client = client<br>
<br>&nbsp;&nbsp;&nbsp; def buildProtocol(self, addr):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return DataServer(self.client)<br>...<br><br>I don&#39;t think this is the best way. Why I can&#39;t simply wirte like Exp.1?<br><br>