Есть sechat который рассылает udp пакеты через ip multicasting (225.0.0.1:9009).
Их неообходимо ловить на питоне.
Все бы ничего, да про multicasting в питоне я ничего не нашел.
Если проводить анологию с программированием сокетов на C, то нужные параметры устанавливаются с помощью setsockopt. В питоне есть такая функция, но только ничего не сказано в документации. Кроме Read Unix Man Pages:)
Как реализовать? Что читать?
ip multicasting & python
- Silos
- Неотъемлемая часть форума
- Сообщения: 287
- Зарегистрирован: 15 фев 2004, 19:04
- Откуда: Belarus, Minsk
- Контактная информация:
Собственно их я почитал.
Выдрал кусок кода на C:
Написал по анологии на pythone:
Закоментированная строка должна добавлять мультикаст в сокет. Но этого не происходит из-за того, что я не знаю как сказать
на питоне.
Выдрал кусок кода на C:
Код: Выделить всё
bzero((char *)&sto,sizeof(sto));
addr.s_addr=inet_addr("225.0.0.1");
sto.sin_family=AF_INET;
sto.sin_port=htons(port);
sto.sin_addr=addr;
nlen=sizeof(sockaddr_in);
int ttl=7,one=1;
struct ip_mreq mreq;
if((Socket=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1)
{
Error(0);
}
Address.sin_family=AF_INET;
Address.sin_port=htons(port);
Address.sin_addr.s_addr=INADDR_ANY;
if(bind(Socket,(struct sockaddr *)&Address,sizeof(Address))==-1)
{
Error(1);
}
if(setsockopt(Socket,IPPROTO_IP,IP_MULTICAST_TTL,&ttl,sizeof(ttl))==-1)
{
Error(2);
}
bzero((char *)&mreq,sizeof(mreq));
mreq.imr_multiaddr.s_addr=inet_addr("225.0.0.1");
mreq.imr_interface.s_addr=INADDR_ANY;
if(setsockopt(Socket,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))==-1)
{
Error(2);
}
setsockopt(Socket,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(one));
Код: Выделить всё
ost = "255.0.0.1"
port = 9009
buf = 1024
addr = (host,port)
UDPSock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)
UDPSock.bind(addr)
UDPSock.setsockopt(IPPROTO_IP, IP_MULTICAST_TTL, 7)
#UDPSock.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, "225.0.0.1")
UDPSock.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
Код: Выделить всё
mreq.imr_multiaddr.s_addr=inet_addr("225.0.0.1");
mreq.imr_interface.s_addr=INADDR_ANY;
if(setsockopt(Socket,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq))==-1)
я вас прошу...
по запросу "python multicast server example" - в пределах первого экрана (даже не страницы)
http://aspn.activestate.com/ASPN/Cookbo ... ipe/425975
по запросу "python multicast server example" - в пределах первого экрана (даже не страницы)
http://aspn.activestate.com/ASPN/Cookbo ... ipe/425975
Опыт растет прямо пропорционально выведенному из строя оборудованию
- Silos
- Неотъемлемая часть форума
- Сообщения: 287
- Зарегистрирован: 15 фев 2004, 19:04
- Откуда: Belarus, Minsk
- Контактная информация:
Llama, спасибо!
Хоть это и не то, но это помогло http://www.bluebear.co.nz/log/2006/05/2 ... multicast/.
Теперь осталось написать обертку на C.
Хоть это и не то, но это помогло http://www.bluebear.co.nz/log/2006/05/2 ... multicast/.
Теперь осталось написать обертку на C.