Sockets en Java

Sockets en Java – cliente y servidor

Los sockets en Java o cualquier otro lenguaje de programación sirven para interconectar dos sistemas a través de la red, sólo utilizando un número ip o nombre de host y un puerto determinado. La arquitectura utilizada en los sockets es la de Cliente/Servidor.

Con el uso de sockets en Java se pueden desarrollar muchos sistemas, como por ejemplos chats, videos juegos online y multijugador o incluso una simple página web.

En este artículo vamos a entender cómo utilizar sockets en Java con un ejemplo sencillo donde un cliente se conecta a un servidor para enviarle un mensaje y recibir una respuesta.

Ejemplo Cliente/Servidor usando sockets en Java

A continuación el código fuente realizado en Java del cliente donde se conecta con el servidor y le envía un mensaje:

package com.programacionextrema;

import java.io.*;
import java.net.*;

public class Cliente {

	private static String HOST = "localhost";
	private static int PUERTO = 2017;

	public static void main(String args[]) {
		
		Socket socket;
		DataOutputStream mensaje;
		
		try {
			//Creamos nuestro socket
			socket = new Socket(HOST, PUERTO);
	
			mensaje = new DataOutputStream(socket.getOutputStream());

			//Enviamos un mensaje
			mensaje.writeUTF("Hola soy un cliente!!");

			//Cerramos la conexión
			socket.close();

		} catch (UnknownHostException e) {
			System.out.println("El host no existe o no está activo.");
		} catch (IOException e) {
			System.out.println("Error de entrada/salida.");
		}
        
	}
}

Ahora el código del servidor:

package com.programacionextrema;

import java.io.*;
import java.net.*;

public class Servidor {
	private static int PUERTO = 2017;

	public static void main(String args[]) {
		
		BufferedReader entrada;
		DataOutputStream salida;
		Socket socket;
		ServerSocket serverSocket;
		
		try {
			serverSocket = new ServerSocket(PUERTO);

			System.out.println("Esperando una conexión...");

			socket = serverSocket.accept();

			System.out.println("Un cliente se ha conectado...");

			// Para los canales de entrada y salida de datos

			entrada = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));

			salida = new DataOutputStream(socket.getOutputStream());

			System.out.println("Confirmando conexion al cliente....");

			salida.writeUTF("Conexión exitosa...");

			// Para recibir el mensaje

			String mensajeRecibido = entrada.readLine();

			System.out.println(mensajeRecibido);

			salida.writeUTF("Se recibio tu mensaje.");

			salida.writeUTF("Gracias por conectarte.");

			System.out.println("Cerrando conexión...");

			// Cerrando la conexón
			serverSocket.close();

		} catch (IOException e) {
			System.out.println("Error de entrada/salida."  + e.getMessage());
		}

	}
}

Es importante a la hora de probar estos dos códigos, empezar ejecutando el servidor y luego el cliente ya que si se ejecuta el cliente en primer lugar fallará la conexión porque no podrá conectarse al servidor.

Bueno, esto es todo lo que se tiene que saber a la hora de usar sockets en Java, les recomiendo leer también el artículo que habla de hilos o thread en java ya que con estos dos conceptos se pueden realizar muchas cosas interesantes, como por ejemplo un chat.

Compartilo en
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone

AboutJosé Di Meglio

Apasionado de la tecnología y programación. Aportando información gratuita sobre el mundo de la informática.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *