Tengo que enviar un paquete UDP y obtener una respuesta del servidor UDP. Aunque pensé que UDP era análogo a java.net.DatagramPacket en Java, pero la documentación para DatagramPacket parece ser que envías un paquete pero no recuperas nada, ¿es esto lo correcto o debo usar java? net.SocketNecesito enviar un paquete UDP y recibir una respuesta en Java
Respuesta
Ejemplo de datagramas UDP envío y recepción (source):
import java.io.*;
import java.net.*;
class UDPClient
{
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER:" + modifiedSentence);
clientSocket.close();
}
}
Esto se ve bien, pero parece que no hay una longitud de paquete definida para el servidor, es decir, no creo que la longitud del paquete devuelto por el servidor sea siempre la misma, así que solo necesito asegurarme de que receiveData el búfer es lo suficientemente grande como para manejar el mayor tamaño de paquete posible. –
Sí. UDP no es un protocolo confiable, y rara vez se usa para enviar grandes cantidades de datos sobre él. Sin embargo, después de recibir el paquete, puede leer la cantidad real de bytes contenidos en 'DatagramPacket.getLength()'. – bezmax
'receivePacket.getData()' no solo contiene los datos recibidos. Contiene la parte no utilizada del búfer, también. Para obtener una Cadena con los datos recibidos use 'new String (receivePacket.getData(), 0, receivePacket.getLength(), StandardCharsets.UTF_8)' y ajuste el juego de caracteres a lo que espera. –
Debe utilizar un DatagramPacket y un DatagramSocket. Cuando envía un paquete, solo envía un paquete. Sin embargo cuando se recibe un paquete se puede obtener un paquete que fue enviado desde otro programa (por ejemplo, los servidores responden)
http://docs.oracle.com/javase/7/docs/api/java/net/DatagramSocket.html
Socket es sólo para las conexiones TCP.
La documentación de Java cubre cómo escribir un cliente y un servidor.
http://docs.oracle.com/javase/tutorial/networking/datagrams/clientServer.html
que desea buscar en DatagramSocket#receive
Eso es, precisamente, la distinción entre UDP y TCP sockets.
Se transmite UDP, mientras que TCP con java.net.Socket es punto a punto. UDP es "olvidar y olvidar", análogo a publicar un mensaje en un tema JMS.
Ver: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html
UDP no se transmite. La difusión es una cosa de nivel de IP. – OrangeDog
- 1. Enviar y recibir datos a través de UDP en PowerShell
- 2. Enviar y recibir el objeto de serialización en UDP
- 3. Transmisión y respuesta de UDP UDP
- 4. ¿Cómo enviar y recibir UDP en el mismo puerto?
- 5. Respuesta UDP
- 6. ¿Cómo recibir solicitudes xml y enviar respuesta xml en php?
- 7. ¿Cómo enviar la solicitud HTTP POST y recibir respuesta?
- 8. ¿Cómo obtener TTL de un paquete UDP en Java?
- 9. Uso de netcat para enviar un paquete UDP sin enlace
- 10. androide RTP enviar y recibir programas
- 11. Transmisión UDP en Java
- 12. Java: recibir una respuesta HTTP de varias partes
- 13. cómo enviar un int a través de UDP en Java
- 14. Enviar datos grandes en el socket UDP
- 15. ¿Necesito una Mac para hacer un paquete de aplicaciones Java?
- 16. Enviar y recibir matrices mediante sockets
- 17. Recibir y enviar correos electrónicos en python
- 18. zócalo enviar y recibir matriz de bytes
- 19. Enviar y recibir datos TCP en ruby
- 20. Usando sockets para enviar y recibir datos
- 21. Tamaño del paquete vacío UDP y TCP?
- 22. Restablecimiento de la conexión al recibir el paquete en el servidor UDP
- 23. Cómo construir un paquete UDP pero no enviarlo
- 24. ¿puedo leer exactamente un paquete UDP de un socket?
- 25. enviando y recibiendo paquetes UDP usando Java?
- 26. Cómo enviar y recibir mensajes de difusión
- 27. Desechar el paquete UDP entrante sin leer
- 28. UDP Tamaño de paquete y pérdida de paquetes
- 29. ¿Enviar y recibir SMS a un script PHP?
- 30. django para enviar Y recibir un correo electrónico?
UDP es datagrama. No recuperas nada a menos que el receptor devuelva algo. Es lo mismo con un socket tcp. Si nos dices lo que quieres hacer, tal vez? – Erik
Ok el servidor ya existe (no escrito por mí) debería enviar algo a cambio cuando le envío un paquete, pero ¿cómo consigo el paquete que envía de vuelta? –
primera pregunta es: ¿el servidor envía udp? Si es así, debe leer desde su propio socket UDP a través del método Datagram.receive(). – Erik