Skip to content

Instantly share code, notes, and snippets.

@thblckjkr
Created September 8, 2019 05:25
Show Gist options
  • Save thblckjkr/1efb82d28e68a4d402e13ef04ee49d88 to your computer and use it in GitHub Desktop.
Save thblckjkr/1efb82d28e68a4d402e13ef04ee49d88 to your computer and use it in GitHub Desktop.
Simple pair of sockets on Java.
/*
* 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();
}
}
}
/*
* 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