
Modelo Cliente-Servidor
Vamos a implementar un modelo Cliente-Servidor básico utilizando el API de sockets en Java. Levantaremos una clase servidora y utilizaremos una clase cliente para enviarle información.

Clase abstracta “Conector”
Esta clase implementa un conector general definiendo los puertos y las ips de conexión. A partir de ella implementaremos por herencia las clases del cliente y servidor.
abstract public class Conector
{
private final int PUERTO = 1234;
private final String HOST = "localhost";
public static final String CONECTOR_TIPO_SERVIDOR = "servidor";
public static final String CONECTOR_TIPO_CLIENTE = "cliente";
protected String mensajeServidor;
protected ServerSocket serverSocket;
protected Socket clientSocket;
protected DataOutputStream salidaServidor, salidaCliente;
public Conector(String tipo) throws IOException
{
if(tipo.equalsIgnoreCase(CONECTOR_TIPO_SERVIDOR))
{
serverSocket = new ServerSocket(PUERTO);
clientSocket = new Socket();
}
else if(tipo.equalsIgnoreCase(CONECTOR_TIPO_CLIENTE))
{
clientSocket = new Socket(HOST, PUERTO);
}
}
}
Clase “Servidor”
Esta clase extiende la clase “Conector”. Implementa el comportamiento de un servidor. Al ejecutarla se mantiene en espera de una conexión de un cliente para recibir datos.
public class Servidor extends Conector
{
public Servidor() throws IOException
{
super(CONECTOR_TIPO_SERVIDOR);
}
public void startServer()
{
try
{
System.out.println("...En espera de recibir conexiones...");
clientSocket = serverSocket.accept(); // En espera de la conexion de un cliente
System.out.println("Cliente en línea");
salidaCliente = new DataOutputStream(clientSocket.getOutputStream());
salidaCliente.writeUTF("Petición recibida y aceptada");
BufferedReader entrada = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
while((mensajeServidor = entrada.readLine()) != null) // Recibiendo mensajes del cliente
{
System.out.println(mensajeServidor);
}
System.out.println("Fin de la conexión");
serverSocket.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Clase “Cliente”
Clase “Cliente” que extiende la clase “Conector”. Establece una conexión con un servidor para enviarle datos.
public class Cliente extends Conector
{
public Cliente() throws IOException
{
super(CONECTOR_TIPO_CLIENTE);
}
public void startClient()
{
try
{
salidaServidor = new DataOutputStream(clientSocket.getOutputStream());
for (int i = 0; i < 2; i++)
{
salidaServidor.writeUTF("Mensaje numero " + (i+1) + "\n");
}
clientSocket.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
Clase Test Servidor
Esta clase sirve para poder “levantar” un servidor.
public class TestServidor
{
public static void main(String[] args) throws IOException
{
Servidor serv = new Servidor();
System.out.println("Levantando servidor\n");
serv.startServer();
}
}
Clase Test Cliente
Esta clase inicia un cliente. Necesitas lanzar antes la clase “TestServidor” para que el cliente tenga a donde conectarse.
public class TestCliente
{
public static void main(String[] args) throws IOException
{
Cliente cli = new Cliente();
System.out.println("Iniciando cliente\n");
cli.startClient();
}
}
Más algoritmos de redes
| Tema | Descripción |
| Sockets | Aprende lo básico sobre sockets en Java, construye tus protocolos. |
| Websockets | Construye un endpoint en Java al que conectar mediante Websockets. |
| FTP | Código para implementar en Java un cliente FTP |
| IMAP | Cliente IMAP escrito en Java. |
| SMB/jCIFS | Uso de jCIFS para el acceso a recursos de red compartidos mediante SAMBA |
| Send Mail Java | Envío de correos electrónicos a través de JavaMail API |
Recursos básicos Java
| Asunto | Descripción |
| Tutorial básico y sintaxis | Tutorial básico Java y sintaxis. Aprende los fundamentos del lenguaje. |
| Hilos (Threads) | Aprende a manejar hilos y las cuestiones básicas de la concurrencia |
| Funciones Lambda | Aquí te enseñamos las nociones más importantes para arrancas con funciones lambda |
| Palíndromos | Programa de ejemplo para el uso de palíndromos en Java. |
| Máquina Virtual de Java | Te explicamos el funcionamiento de la máquina virtual de java (Java Virtual Machine – JVM) |
| JDK, JRE y JVM | Diferencias entre el JDK, JRE y JVM. |
| Mejores libros Java en Español | Hazte con los mejores libros Java para aprender paso a paso y profundizar en las mejores prácticas |
| TensorFlow | Manejo del API de TensorFlow para la construcción de grafos de operaciones y su ejecución |
| Tutorial Log4j | Tutorial para el manejo de Log4j, herramienta ágil y flexible para la gestión de Logs en Java |
| Java Security | Entiende y aplica las posibilidades que da Java para mantener la seguridad |
| Tutorial JConsole | Aprende los conceptos básicos de monitorización de procesos Java con JConsole |
| JavaFX | Tutorial de JavaFX, librería gráfica moderna para construcción de GUIs en móvil, escritorio y web. |
| Estructuras de datos en Java | Explicación y ejemplos de las estructuras de datos más importantes: listas, pila, cola, arbol. |
| Javaapi | Conjunto de clases, interfaces, métodos y paquetes que forman parte de la plataforma Java estándar |
| Algoritmo Huffman | Método eficiente para codificar datos, asignando códigos más cortos a los caracteres más frecuentes |