扭曲:如何通过单端口上的扭曲客户端发送消息?

时间:2017-06-24 19:04:31

标签: python twisted

我可以通过拨打connector.connect()从扭曲的客户端向服务器发送消息。但客户将在不同的端口上制作。以下代码演示了这种情况:

SERVER_HOST = 'localhost'
SERVER_PORT = '5000'

class EchoClient(protocol.Protocol):
    def connectionMade(self):
        self.transport.write("message")
        self.transport.loseConnection()

class EchoFactory(protocol.ClientFactory):
    def buildProtocol(self, addr):
        print('Connected.')
        return EchoClient()

    def clientConnectionLost(self, connector, reason):
        print('Lost connection.  Reason:', reason)
        connector.connect()


def main():
    reactor.connectTCP(SERVER_HOST, SERVER_PORT, EchoFactory())
    reactor.run()

我扭曲的服务器说我:

Packet received, client 127.0.0.1:41930, size: 7
Connection lost
Packet received, client 127.0.0.1:41931, size: 7
Connection lost
Packet received, client 127.0.0.1:41932, size: 7
Connection lost
Packet received, client 127.0.0.1:41933, size: 7

客户端有不同的端口 - 41930,41931等。如何通过单端口从扭曲的客户端发送消息?

1 个答案:

答案 0 :(得分:2)

您可以在connectTCPclientFromStringTCP4ClientEndpointTCP6ClientEndpoint中使用bindAddress参数。使用您的示例,您的代码将如下所示:

reactor.connectTCP(SERVER_HOST, SERVER_PORT, EchoFactory(), bindAddress=('127.0.0.1',9999))

如果不是绝对必要的话,我建议你避免这种情况,因为端口可能正在被另一个进程使用并导致异常。操作系统最好选择ip:port来绑定你的应用程序。