Уведомления

Группа в Telegram: @pythonsu

#1 Май 16, 2008 06:25:31

init
От:
Зарегистрирован: 2008-05-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

listenMulticast + listenMultiple

Есть следующий код:

class MulticastServerUDP(DatagramProtocol):
    def __init__(self, ip):
        self.ip = ip
    def startProtocol(self):
        self.transport.joinGroup(self.ip)
    def datagramReceived(self, data, address):
        print data
mcast = MulticastServerUDP('229.254.1.23')
reactor.listenMulticast(9000, mcast, listenMultiple=True)
mcast2 = MulticastServerUDP('229.253.1.27')
reactor.listenMulticast(9000, mcast2, listenMultiple=True)

Необходимо слушать на одном порту данные по нескольким мультикаст-адресам. Все работает, но возникла проблема datagramReceived получает все пакеты, независимо от того, к какому адресу был сделан joinGroup. То есть в данном примере все пакеты выводятся по два раза. Как различить, к какой группе принадлежит пакет?



Офлайн

#2 Май 16, 2008 13:37:44

init
От:
Зарегистрирован: 2008-05-15
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

listenMulticast + listenMultiple

Разобрался, если в listenMulticast указать interface=IP, то datagramReceived вызывается только при своих пакетах.



Офлайн

#3 Май 16, 2008 14:11:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

listenMulticast + listenMultiple

А self.transport.getOutgoingInterface() у тебя разный? joinGroup вешается на интерфейс а не на ip



Офлайн

#4 Май 16, 2008 14:12:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

listenMulticast + listenMultiple

Собственно говоря, так и оказалось



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version