Twisted:如何通过扭曲的客户端在单个端口上发送消息?
Twisted: How to send messages by twisted client on single port?
我可以通过调用 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 等。如何从具有单一端口的扭曲客户端发送消息?
您可以在 connectTCP
, clientFromString
, TCP4ClientEndpoint
, or TCP6ClientEndpoint
中使用 bindAddress
参数。使用您的示例,您的代码如下所示:
reactor.connectTCP(SERVER_HOST, SERVER_PORT, EchoFactory(), bindAddress=('127.0.0.1',9999))
如果不是绝对必要,我建议您避免这样做,因为该端口可能正在被另一个进程使用并会导致异常。 OS 最好为您的应用程序选择 ip:port 绑定。
我可以通过调用 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 等。如何从具有单一端口的扭曲客户端发送消息?
您可以在 connectTCP
, clientFromString
, TCP4ClientEndpoint
, or TCP6ClientEndpoint
中使用 bindAddress
参数。使用您的示例,您的代码如下所示:
reactor.connectTCP(SERVER_HOST, SERVER_PORT, EchoFactory(), bindAddress=('127.0.0.1',9999))
如果不是绝对必要,我建议您避免这样做,因为该端口可能正在被另一个进程使用并会导致异常。 OS 最好为您的应用程序选择 ip:port 绑定。