View Full Version : non mi funziona UDP O_o
premesso che ho un router adsl che mi bloccava tutte le porte UDP in entrata e che gli ho appena cambiato configurazione aprendole tutte.
non riesco in alcun modo ad inviare/ricevere datagram UDP in multicast, e il bello è che non mi arrivano neanche quando li spedisco con l'opzione di loopback!! O_o
ho provato in due modi: in un programma C che sto facendo per l'università li invio senza opzione di loopback (e ovviamente col cavolo che arrivano), ed in un altro programma Java li invio richiedendo anche il loopback, e ovviamente arrivano meno di prima. la cosa strana è che router o non router, se li mando in loopback a me devono comunque tornare, no?
preferirei ragionare sul codice Java che è più semplice. secondo voi sbaglio qualcosa nel modo di ricevere o di inviare, che espongo rispettivamente qui di seguito?
ricezione:
try
{
multicastAddress = InetAddress.getByName(MULTICAST_GROUP); // come gruppo ho scelto momentaneamente 224.0.0.3, che su IANA risulta essere il primo libero
socket = new MulticastSocket(MULTICAST_PORT); // come porta uso la 9090
socket.setTimeToLive(255);
socket.setLoopbackMode(true);
socket.joinGroup(multicastAddress);
}
catch (Exception e)
{
showError();
return;
}
.
.
.
new Thread()
{
public void run()
{
DatagramPacket packet;
try
{
byte[] buffer = new byte[socket.getReceiveBufferSize()];
packet = new DatagramPacket(buffer, buffer.length);
}
catch (SocketException e)
{
showError();
return;
}
while (true)
{
try
{
socket.receive(packet);
}
catch (IOException e)
{
}
logText(packet.getData().toString());
}
}
}.start();
invio:
String text = ...;
byte[] buffer = text.getBytes(); // sono sicuro che "text" contenga del testo (verificato col debugger)
try
{
socket.send(new DatagramPacket(buffer, buffer.length, multicastAddress, MULTICAST_PORT));
}
catch (IOException e)
{
logText("<unable to send message>");
}
grazie.
mad_hhatter
03-06-2007, 00:38
setLoopBackMode(true) DISABILITA il loopback... hai provato con false?
su che sistema operativo lavori? magari potresti dover aprire le porte udp anche a livello di firewall del s.o. (penso per esempio a winxp) nei pc a cui spedisci i pacchetti (ovviamente questo non serve se mandi solo in loopback)
Stai provando in una LAN vero?
Stai provando in una LAN vero? be', perché, su Internet invece che dovrebbe succedere? O_o
comunque ho provato anche in LAN, ovvero ho provato quel codice sul mio computer, su uno della LAN, e su uno esterno di un amico. non riceviamo un bel nulla :D
l'unica differenza è che adesso riceviamo i messaggi che noi stessi inviamo perché ho fatto funzionare il loopback (grazie mad_hhatter).
EDIT - su tutti e tre i computers c'è solo il firewall di XP, e quando ha mostrato l'"avviso di protezione" abbiamo detto "Sblocca".
Su internet deve essere predisposta per il multicast.
E penso che qui tranne per rare accezzioni non vada.
In LAN però dovrebbe andare se setti tutto per bene.
EDIT - su tutti e tre i computers c'è solo il firewall di XP, e quando ha mostrato l'"avviso di protezione" abbiamo detto "Sblocca". mi viene il dubbio che non sia sufficiente... "Sblocca" suppongo che faccia uscire i pacchetti UDP dall'host, ma per assicurarsi che li posso anche ricevere...?
Su internet deve essere predisposta per il multicast.
E penso che qui tranne per rare accezzioni non vada.
In LAN però dovrebbe andare se setti tutto per bene. qual è il soggetto di "dovrebbe essere predisposta"?
Bhe se la porta di uscita è diversa da quella di entrata sono due le porte da sbloccare ovviamente
Che in pratica i nodi che creano la rete "internet" devono essere dotati di multicast, se trovo un articolo che lo spiega te lo posto.
Io mi esprimo da cavernicolo...
Bhe se la porta di uscita è diversa da quella di entrata sono due le porte da sbloccare ovviamente se mando su una porta diversa da quella su cui ricevo, penso che non ricevo nulla... il fatto delle porte diverse penso funzioni con TCP, non col multicast... comunque io ho usato sempre la stessa porta (9090).
Qui dice qualcosa(ma poco)
In Internet, il servizio multicast è implementato solo parzialmente, e in modo molto più complesso, perché la funzionalità di routing multicast deve essere aggiunta a tutti i router. Il protocollo IGMP viene usato dai computer per richiedere di essere iscritti ad un gruppo multicast, ed esistono appositi algoritmi di routing per il traffico multicast, come DVMRP e Protocol Independent Multicast (PIM). Come per il traffico unicast, ci si appoggia ad eventuali meccanismi di multicast forniti dalle reti utilizzate.
Fonte wikipedia (http://it.wikipedia.org/wiki/Multicast)
Che in pratica i nodi che creano la rete "internet" devono essere dotati di multicast, se trovo un articolo che lo spiega te lo posto.
Io mi esprimo da cavernicolo... traduzione più probabile... "i routers devono supportare il multicast" :D
il multicast UDP è parte dell'implementazione di UDP e quindi dello stack TCP/IP; non credo che i routers del provider siano autorizzati a non implementarlo... :wtf:
tutt'al più potrebbero avere un firewall che blocca pacchetti UDP.
Qui dice qualcosa(ma poco)
Fonte wikipedia (http://it.wikipedia.org/wiki/Multicast) grazie, ora leggo
Qui dice qualcosa(ma poco)
Fonte wikipedia (http://it.wikipedia.org/wiki/Multicast) ho letto, ma so che IGMP non è di competenza del livello Application: io devo solamente fare il join ad un gruppo multicast, la qual cosa provocherà l'invio di un pacchetto IGMP, ma posso anche non saperne nulla. aldilà di tutto questo, quali difficoltà può avere in Internet un host a ricevere pacchetti multicast inviati da un host remoto?
EDIT - ma il "trend" (per così dire) sarebbe quello di favorire l'UDP Multicast o il contrario? cioè, la maggior parte dei providers lasciano passare i pacchetti UDP o li bloccano? bloccano solo quelli diretti a gruppi multicast o li bloccano tutti?
Non ne ho idea...ma mi ricordo che anche io provai in java senza risultato.
Sto cercando anche ora e sui gruppi di google si trova di gente che dice che attraverso internet non funzionerà mai...
Non ne ho idea...ma mi ricordo che anche io provai in java senza risultato.
Sto cercando anche ora e sui gruppi di google si trova di gente che dice che attraverso internet non funzionerà mai... già, ho visto anche io... :\
ma se uno è un utente FastWeb? dicono che gli utenti FastWeb sono come in una grossa LAN, è vero? il multicast funziona tra utenti FastWeb?
Io non te lo saprei dire, bisognerebbe fare qualche prova per sapere se è una rete predisposta.
E' probabile di si comunque.
Io non te lo saprei dire, bisognerebbe fare qualche prova per sapere se è una rete predisposta.
E' probabile di si comunque. mi viene in mente che io ho almeno 2 amici che hanno FastWeb :D
chiederò di provare tra di loro :D
d'oh: non funge -.-
annuncio ufficialmente che due utenti FastWeb non possono inviarsi pacchetti UDP via multicast :read:
ma io dico... se il multicast funziona solo nelle reti locali allora vuol dire che i pacchetti multicast non possono passare nessun router, e questo significa che la possibilità di impostare il TTL è completamente inutile...
mad_hhatter
03-06-2007, 16:03
anche in lan (la discussione su internet la devo ancora leggere) su win xp quand dici sblocca lasci soltanto che il programma esca in rete, ma hai le porte chiuse: i pacchetti escono, ma quando cercano di entrare vengono bloccate. apri le porte che usi sul firewall di win xp, magari solo in ambito lan (x sicurezza) e dovrebbe andare
mad_hhatter
03-06-2007, 16:08
ma io dico... se il multicast funziona solo nelle reti locali allora vuol dire che i pacchetti multicast non possono passare nessun router, e questo significa che la possibilità di impostare il TTL è completamente inutile...
probabilmente è molto comune disabilitare il multicast a livello di router/firewall... magari, una grossa rete aziendale contenente router configurati per ammettere il multicast può funzionare :mc:
d'oh: non funge -.-
annuncio ufficialmente che due utenti FastWeb non possono inviarsi pacchetti UDP via multicast :read:
potrebbe funzionare se i 2 utenti sono nella stessa sottorete(sotto lo stesso NAT) altrimenti nulla.
dico questo perchè anni fa avevo letto che se uno nella sottorete aveva comprato la tv di fw, anche gli altri la potevano vedere, visto che era trasmessa in multicast sulla sottorete(ma parlo di parecchi anni fa)
d'oh: non funge -.-
annuncio ufficialmente che due utenti FastWeb non possono inviarsi pacchetti UDP via multicast :read:
Esatto.
Ma neanche TCP.
http://www.gamedev.net/reference/articles/article1587.asp
ho cercato su Wikipedia delle informazioni sulla trasmissione della TV via Internet, che avviene tramite IP Multicast, e Wikipedia sostiene che ci sono attualmente più di 1300 canali televisivi gratuiti... ma sta TV via Internet esiste per davvero o sono tutte balle? i gruppi multicast usati per essa funzionano anche attraverso Internet? e soprattutto che differenza c'è tra IPTV e Internet TV?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.