Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema al hacer envío UDP

Estoy programando con NetBeans y hasta ahora me voy apañando poco a poco pero tengo un problema con los sockets de java y es que el envío mediante TCP lo hago correctamente, pero ahora quiero hacerlo con UDP y leyendo las diferencias he modificado el código pero me encuentro con que no me funciona.

El código de envio correcto en TCP es el siguiente:

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class EchoSender
{

public EchoSender()
{
}

public static void sendEcho(String destination, int port, String sentence)
{
String echo = (new StringBuilder()).append(sentence).append("\n\r").toString();
Log.info((new StringBuilder()).append("Enviando echo: ").append(echo).toString());
Log.info((new StringBuilder()).append("destination: ").append(destination).toString());
Log.info((new StringBuilder()).append("port: ").append(port).toString());
try
{
Socket socket = new Socket(destination, port);
OutputStream os = socket.getOutputStream();
os.write(echo.getBytes());
os.close();
socket.close();
}
catch(UnknownHostException e)
{
Log.error((new StringBuilder()).append("No se puede encontrar el host para el echo: ").append(destination).append(" en el puerto: ").append(port).toString());
}
catch(IOException e)
{
Log.error((new StringBuilder()).append("Ha habido un problema en el envio del echo: ").append(destination).append(" en el puerto: ").append(port).toString());
}
}
}

____________________________________

Este lo he modificado por el siguiente que no me funciona y quisiera saber el por qué (si alguien fuese tan amable de ayudarme). El problema en NetBeans me pone que está en "paquete.length". Un saludo y gracias de antemano:

import java.io.IOException;
import java.net.UnknownHostException;
import java.net.DatagramSocket;
import java.net.DatagramPacket;

public class EchoSender
{

public EchoSender()
{
}

public static void sendEcho(String destination, int port, String sentence)
{
String echo = (new StringBuilder()).append(sentence).append("\n\r").toString();
Log.info((new StringBuilder()).append("Enviando echo: ").append(echo).toString());
Log.info((new StringBuilder()).append("destination: ").append(destination).toString());
Log.info((new StringBuilder()).append("port: ").append(port).toString());
try
{
DatagramSocket socket = new DatagramSocket();
byte[ ] paquete = echo.getBytes( );
DatagramPacket os = new DatagramPacket(paquete, paquete.length(), destination, port);
socket.send(os);
socket.close();
}
catch(UnknownHostException e)
{
Log.error((new StringBuilder()).append("No se puede encontrar el host para el echo: ").append(destination).append(" en el puerto: ").append(port).toString());
}
catch(IOException e)
{
Log.error((new StringBuilder()).append("Ha habido un problema en el envio del echo: ").append(destination).append(" en el puerto: ").append(port).toString());
}
}
}

julio 24, 2014 | Unregistered CommenterCatherina butatana

En un array, length es una propiedad, no un metodo.

Tienes que poner paquete.length y no paquete.length()

Un saludo

julio 24, 2014 | Unregistered CommenterUnoPorAhi

Gracias UnoPorAhi .

Ya lo he hecho pero sigue dando errores (y esta vez toda la línea donde aparece "length".

Un saludo

julio 24, 2014 | Unregistered CommenterCatherina butatana

Cuando dices que esta dando errores supongo que te refieres a que te aparece subrayado en rojo.

Son errores en la compilacion de java que Netbeans presenta asi. Si pones encima el raton el propio Netbeans te dira que es lo que pasa y te propondra soluciones.

En este caso, por ejemplo, le estas pasando como destination un String, cuando lo que espera es un InetAddress.

http://docs.oracle.com/javase/7/docs/api/java/net/DatagramPacket.html

Si tienes nuevos errores tienes que indicarnos exactamente que te dice, porque no podemos adivinarlos con solo mirar el codigo.

Un saludo

julio 24, 2014 | Unregistered CommenterUnoPorAhi