Created
September 8, 2019 05:25
-
-
Save thblckjkr/1efb82d28e68a4d402e13ef04ee49d88 to your computer and use it in GitHub Desktop.
Simple pair of sockets on Java.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* I'm just making a proper docs of this program | |
* This was just to make things easier to me and a friend, but i think it does not hurt to share | |
* @thblckjkr [2019/09/07] | |
*/ | |
// Se importan los paquetes | |
// https://docs.oracle.com/javase/10/docs/api/java/io/package-summary.html | |
import java.net.*; // DatagramSocket, DatagramPAcket, SocketException, InetAddress | |
// https://docs.oracle.com/javase/10/docs/api/java/io/package-summary.html | |
import java.io.*; // IoException (?) | |
/* | |
El par de programas UDPCLient y UDPServer, funcionan de la siguiente forma. | |
- El Servidor abre un puerto para recibir paquetes. | |
- El cliente envia un mensaje al servidor | |
- El servidor responde el mismo mensaje al cliente | |
- El cliente muestra el mensaje y termina la ejecución | |
El programa cliente recibe 2 argumentos al ser inicialzado. | |
- args[0] Mensaje a enviar | |
- args[1] IP del servidor | |
*/ | |
public class UDPClient | |
{ | |
public static void main(String args[]){ | |
// Crear un objeto (basicamente un manager de sockets) | |
DatagramSocket aSocket = null; | |
try { | |
// Intentamos inicializar el socket | |
aSocket = new DatagramSocket(); | |
// Mensaje [argumento 0] | |
byte [] m = args[0].getBytes(); // Convertir el texto a enviar a Bytes, porque el DatagramPacket espera un arreglo de bytes como argumento | |
int tam = args[0].length(); // Tamaño del mensaje a enviar | |
// IP del Host [argumento 1] | |
InetAddress aHost = InetAddress.getByName(args[1]); // Convertir string a un objeto especial para almacenar la IP | |
// Puerto en el que corre el servidor | |
int serverPort = 5678; | |
// Paquete a enviar | |
DatagramPacket request = new DatagramPacket(m, tam, aHost, serverPort); // Aqui se arma el mensaje | |
// Enviar mensaje | |
aSocket.send(request); | |
// Buffer de respuesta | |
byte[] buffer = new byte[1000]; // Creamos un buffer en el que recibiremos la respuesta | |
// Almacenamos la respuesta en un buffer | |
DatagramPacket reply = new DatagramPacket(buffer, buffer.length); | |
// Almacenamos la respuesta del socket en el que enviamos el mensaje, en el paquete reply | |
aSocket.receive(reply); | |
// Imprimimos la respuesta del servidor | |
System.out.println("Reply: " + new String(reply.getData())); | |
} | |
catch (SocketException e){ | |
// Si el socket falla, nos informa | |
System.out.println("Socket: " + e.getMessage()); | |
} | |
catch (IOException e){ | |
// Si falla... Algo, nos informa | |
System.out.println("IO: " + e.getMessage()); | |
} | |
finally | |
{ | |
// Si se pudo inicializar el socket, lo destruye al finalizar | |
if(aSocket != null) | |
aSocket.close(); | |
} | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* I'm just making a proper docs of this program | |
* This was just to make things easier to me and a friend, but i think it does not hurt to share | |
* @thblckjkr [2019/09/07] | |
*/ | |
// Se importan los paquetes | |
// https://docs.oracle.com/javase/10/docs/api/java/io/package-summary.html | |
import java.net.*; // DatagramSocket, DatagramPAcket, SocketException, InetAddress | |
// https://docs.oracle.com/javase/10/docs/api/java/io/package-summary.html | |
import java.io.*; // IoException (?) | |
/* | |
El programa no recibe argumentos al ser inicializado | |
*/ | |
public class UDPServer{ | |
public static void main(String args[]){ | |
// Crear un objeto (basicamente un manager de sockets) | |
DatagramSocket aSocket = null; | |
try { | |
// Crea un nuevo socket, que escucha en el puerto 5678 | |
int port = 5678; | |
aSocket = new DatagramSocket(port); | |
// Buffer donde recibiremos datos | |
byte[] buffer = new byte[1000]; | |
// Siempre | |
while(true){ | |
// Creas un paquete donde recibes datos | |
DatagramPacket request = new DatagramPacket(buffer, buffer.length); | |
// Recibes los datos del socket en el paquete | |
aSocket.receive(request); | |
// Creas un paquete para responder, con los datos del que envia | |
DatagramPacket reply = new DatagramPacket( | |
request.getData(), | |
request.getLength(), | |
request.getAddress(), | |
request.getPort() | |
); | |
// Respondes por el mismo socket donde recibiste los datos | |
aSocket.send(reply); | |
} | |
} catch (SocketException e) { | |
// Si el socket falla, nos informa | |
System.out.println("Socket: " + e.getMessage()); | |
} catch (IOException e) { | |
// Si falla... Algo, nos informa | |
System.out.println("IO: " + e.getMessage()); | |
} | |
finally { | |
// Si se pudo inicializar el socket, lo destruye al finalizar | |
if(aSocket != null) | |
aSocket.close(); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment