我試圖用Twisted發送和接收UDP消息,發送完每條消息之後我希望從網絡中的其他節點接收相同的消息,然後通過一些回調改變「sender」字符串的值,然後發送消息以新的價值。我想我應該停下來,並開始使用數據報協議的新實例,波紋管代碼是我的模板,我想更改heartBeatSenderObj的「發件人」值,然後期望基於此值的未來數據包的新值,但我找不到它的樣子,我明白任何建議和幫助:如何更新Twisted中UDP協議實例的值?
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
from twisted.internet.task import LoopingCall
import sys, time
class HeartbeatSender(DatagramProtocol):
def __init__(self, name, host, port):
self.name = name
self.loopObj = None
self.host = host
self.port = port
def startProtocol(self):
# Called when transport is connected
# I am ready to send heart beats
self.loopObj = LoopingCall(self.sendHeartBeat)
self.loopObj.start(2, now=False)
def stopProtocol(self):
"Called after all transport is teared down"
pass
def datagramReceived(self, data, (host, port)):
print "received %r from %s:%d" % (data, host, port)
def sendHeartBeat(self):
self.transport.write(self.name, (self.host, self.port))
class HeartbeatReciever(DatagramProtocol):
def __init__(self):
pass
def startProtocol(self):
"Called when transport is connected"
pass
def stopProtocol(self):
"Called after all transport is teared down"
def datagramReceived(self, data, (host, port)):
now = time.localtime(time.time())
timeStr = str(time.strftime("%y/%m/%d %H:%M:%S",now))
print "received %r from %s:%d at %s" % (data, host, port, timeStr)
heartBeatSenderObj = HeartbeatSender("sender", "127.0.0.1", 8005)
reactor.listenMulticast(8005, HeartbeatReciever(), listenMultiple=True)
reactor.listenMulticast(8005, heartBeatSenderObj, listenMultiple=True)
reactor.run()
「刺痛」在您的源代碼中無處可見。也許你犯了一個編輯錯誤? –
謝謝你,你是對的這是編輯問題,當時我發佈這個問題,現在它是固定的,我的意思是我的觀點是改變第一個參數傳遞給heartBeatSenderObj,這是「發件人」,實際上它只是一個字符串,可能它可能是任何東西。 – DeFoG