다음은 멀티 캐스트 수신과 관련된 Twisted의 다음 코드 예제입니다. 나는 현재 같은 클라이언트를 가진 많은 그룹의 말을 듣고 있으며 특정 데이터 그램 패킷이 어느 그룹에서 왔는지를 출력 할 수 있기를 원합니다. 나는 이것이 datagramReceived의 주소 매개 변수로부터받을 수 있다고 생각한다. 그러나 이는 그룹에게 바인드 된 로컬 IP 및 포트를 포함하는 튜플을 제공하지만 그룹 자체의 주소는 제공하지 않습니다.Twisted에서 datagramReceived의 멀티 캐스트 그룹 주소를 얻는 방법?
질문 : Twisted 프로토콜/API 내에서 데이터 그램이 발생한 곳에서 멀티 캐스트 주소를 인쇄하려면 어떻게해야합니까?
from twisted.internet.protocol import DatagramProtocol
from twisted.internet import reactor
class MulticastPingClient(DatagramProtocol):
def startProtocol(self):
# Join the multicast address, so we can receive replies:
self.transport.joinGroup("228.0.0.5")
self.transport.joinGroup("229.0.2.11")
self.transport.joinGroup("221.3.3.3")
# Send to 228.0.0.5:8005 - all listeners on the multicast address
# (including us) will receive this message.
self.transport.write('Client: Ping', ("228.0.0.5", 8005))
def datagramReceived(self, datagram, address):
print "Datagram %s received from %s" % (repr(datagram), repr(address))
reactor.listenMulticast(8005, MulticastPingClient(), listenMultiple=True)
reactor.run()
이렇게하면 여러 스레드가 호출됩니까? 모든 수준에서 잠금 기능이없는 데이터 구조에 데이터 그램을 쓰게하고 있습니다. – jab
아니요, reactor.run() (또는 리액터 이벤트에서 예약 된 일부 함수) 전에 listenUDP를 여러 번 호출하십시오. 스레드가 필요 없습니다. –
쿨, 고마워요! – jab