Foro sobre Java EE > Envio TCP ok pero problema al cambiar código para envio 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:
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:
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()); } } }
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());
}
}
}