View Single Post
Old 02-06-2007, 22:22   #1
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
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:
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.
71104 è offline   Rispondi citando il messaggio o parte di esso