2

私のコードの例は次のとおりです。プログラムのさまざまな時点で任意にデータを送信したいと思います。Twistedは、聞いてから反応するのに最適なようですが、データを送信する方法は簡単です。

    from twisted.internet.protocol import DatagramProtocol
    from twisted.internet import reactor
    import os

    class listener(DatagramProtocol):

        def __init__(self):

        def datagramReceived(self, data, (host, port)):
            print "GOT " + data

        def send_stuff(data):
            self.transport.write(data, (host, port))

    reactor.listenUDP(10000, listener())
    reactor.run()

    ##Some things happen in the program independent of the connection state
    ##Now how to I access send_stuff
4

1 に答える 1

3

あなたの例には、データを送信するコードがすでに含まれています。

    def send_stuff(data):
        self.transport.write(data, (host, port))

言い換えれば、あなたの質問に対する答えは「send_stuffを呼び出す」または「transport.writeを呼び出す」です。

あなたが尋ねたコメントで:

#Now how to I access send_stuff

Twistedを使用しているときに、オブジェクトまたはメソッドに「アクセス」する方法について特別なことは何もありません。それはあなたが書くかもしれない他のPythonプログラムと同じです。変数、属性、コンテナー、関数の引数、またはその他の機能を使用して、オブジェクトへの参照を維持します。

ここではいくつかの例を示します。

# Save the listener instance in a local variable
network = listener()
reactor.listenUDP(10000, network)

# Use the local variable to connect a GUI event to the network
MyGUIApplication().connect_button("send_button", network.send_stuff)

# Use the local variable to implement a signal handler that sends data
def report_signal(*ignored):
    reactor.callFromThread(network.send_stuff, "got sigint")
signal.signal(signal.SIGINT, report_signal)

# Pass the object referenced by the local variable to the initializer of another
# network-related object so it can save the reference and later call methods on it
# when it gets events it wants to respond to.
reactor.listenUDP(20000, AnotherDatagramProtocol(network))

等々。

于 2012-10-29T15:39:58.197 に答える