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:

Exp.1
...
Class ToClientProtocol(Protocol):
""" Protocol for incoming connection from client. """
    
    def connectionMade(self):
       
        self.data_server = reactor.connectTCP('localhost', 8888, DataServerFactory())        # make connection to data server

        self.data_server.transport.write('hello!')         # send a message to data server, but not work
...

The connetion to data server can be made, BUT the data server received nothing. self.data_server.transport.write() not work.

It will work if I write like that:
Exp. 2
...
Class ToClientProtocol(Protocol):
""" Protocol for incoming connection from client. """
    
    def connectionMade(self):
       
        self.data_server = reactor.connectTCP('localhost', 8888, DataServerFactory(self))        # make connection to data server
   
Class DataServer(Protocol):
""" Protocol for connection to data server. """

    def __init__(self, client):
        self.client = client

    def connectionMade(self):
        self.client.data_server.transport.wirte('hello!')        # send message to data server, it's work now!

Class DataServerFactory(self):

    def __init__(self, client):
        self.client = client

    def buildProtocol(self, addr):
        return DataServer(self.client)
...

I don't think this is the best way. Why I can't simply wirte like Exp.1?