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:
Codice:
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:
Codice:
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.