如何使用twisted手动发送数据

时间:2013-12-05 09:52:23

标签: python tcp twisted

我是扭曲框架的新手。

我知道有很多回调函数会自动触发

当连接成功或丢失时。

但我不知道如何在没有这些回调的情况下发送数据。

例如,我想放一个方法custom_write()来发送数据。

    def custom_write(self,data):
        self.transport.write(
            data)

并在我的main():方法中触发该功能。

def main():
    try:
        p_red("I'm Client")
        f = EchoFactory()
        reactor.connectTCP("localhost",
                            8000,
                            f)

reactor.custom_write("HAHAHA")

如果我在不同的端口创建多个reactor绑定怎么办?

Eg: localhost:1234, localhsot:5678

并将不同的两条消息发送到2个连接。

例如:"Thanks" to port 1234Bye~ to port 5678

任何信息都可以给我。

由于

class EchoClient(protocol.Protocol):

    def connectionMade(self):
        self.transport.write(
            "I'm cli")

    def custom_write(self,data):
        self.transport.write(
            data)

    def dataReceived(self, data):
        print "Server said:", data 
        self.transport.loseConnection()
        pass

    def connectionLost(self, reason):
        print("[{0}] Lose connection...".format(
            self.__class__.__name__)
        )
        pass        

class EchoFactory(protocol.ClientFactory):

    protocol = EchoClient
    """docstring for EchoFactory"""
    def clientConnectionFailed(self,
                               connector,
                               reason):
        print "[{0}] Connection failed - goodbye".format(
            self.__class__.__name__)
        reactor.stop()

    def clientConnectionLost(self,
                             connector,
                             reason):        
        print "[{0}] Connection lost - goodbye".format(
            self.__class__.__name__)    
        reactor.stop()

def main():
    try:
        p_red("I'm Client")
        f = EchoFactory()
        reactor.connectTCP("localhost",
                            8000,
                            f)
        try:
            reactor.run()
        except BaseException  as e:
            traceback.print_exc(file=sys.stdout)
            raise e

        pass
    except BaseException  as e:
        traceback.print_exc(file=sys.stdout)
        raise e

    pass

1 个答案:

答案 0 :(得分:0)

您可以多次拨打connectTCP()并使用不同的主机端口。 connectTCP()立即返回,无需等待完整的交换完成。要发送不同的字符串,您可以将它们传递给可以使它们可用于协议的工厂。