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.

7 comments

  1. En la clase servidor tienes
    salida = new DataOutputStream(socket.getOutputStream());
    salida.writeUTF(“Conexión exitosa…”);
    salida.writeUTF(“Se recibio tu mensaje.”);
    salida.writeUTF(“Gracias por conectarte.”);
    Eso para que lo haces? son datos que puedo acceder desde la clase cliente?
    o para que es exactamente?
    Saludos y gracias.

    1. Hola Angel, gracias por tu comentario, esas líneas de código sirven para notificarle al cliente el resultado de las peticiones que hace. Básicamente son respuestas. Cualquier cosa avisame.

          1. Hola Emiliano, si queres hacer un juego simple podes empezar a utilizar socket, incluso para entender como funciona a bajo nivel, pero para hacer un juego un poco más avanzado vas a necesitar de algún framework que te de más herramientas, caso contrario se te va a complicar bastante.

Deja un comentario

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