Sockets en Java

Nada mejor para aclarar el asunto que un ejemplo de sockets donde se comunican un servidor y un cliente.
Para eso vamos a necesitar dos clases, una para el servidor y otra para el cliente.
El servidor tendrá un socket abierto esperando conexiones cliente en el puerto 2004, dicho puerto debe estar disponible en la pc donde se quiere probar el ejemplo.

La clase Servidor:

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

   public class Servidor{
   	ServerSocket socketCliente;
   	Socket conexion = null;
   	ObjectOutputStream out;
   	ObjectInputStream in;
   	String mensaje;

   	Servidor(){}

   	void run()	{
   		try{
   			//1. Creamos el socket del servidor
   			socketCliente = new ServerSocket(2004, 10);

   			//2. Esperamos que se conecte un cliente
   			System.out.println(" ");
   			System.out.println(" ");
   			System.out.println(" ");
   			System.out.println("Esperando conexión del cliente...");
   			conexion = socketCliente.accept();
   			System.out.println("Conexión recibida desde " + conexion.getInetAddress().getHostName());

   			//3. Manejamos los Input y Output streams
   			out = new ObjectOutputStream(conexion.getOutputStream());
   			out.flush();
   			in = new ObjectInputStream(conexion.getInputStream());
   			enviarMensaje("Se estableció la conexión correctamente");

   			//4. Las dos partes de la comunicación via los input y output streams
   			do{
   				try{
   					mensaje = (String)in.readObject();
   					System.out.println("Cliente dice: " + mensaje);
   					if (mensaje.equals("chau"))
   						enviarMensaje("chau");
   				}
   				catch(ClassNotFoundException classnot){
   					System.err.println("Datos recibidos en formato desconocido");
   				}
   			}while(!mensaje.equals("chau"));
   		}
   		catch(IOException ioException){
   			ioException.printStackTrace();
   		}
   		finally{
   			//4: Cerramos la conexión
   			try{
   				in.close();
   				out.close();
   				socketCliente.close();
   			}
   			catch(IOException ioException){
   				ioException.printStackTrace();
   			}
   		}
   	}

   	void enviarMensaje(String mensaje){
   		try{
   			out.writeObject(mensaje);
   			out.flush();
   			System.out.println("Servidor dice: " + mensaje);
   		}
   		catch(IOException ioException){
   			ioException.printStackTrace();
   		}
   	}

   	public static void main(String args[])	{
   		Servidor servidor = new Servidor();
   		while(true){
   			servidor.run();
   		}
   	}
   }

Y para comunicarse con nuestro Servidor necesitamos ahora la clase Cliente:

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

   public class Cliente{
   	Socket socketServidor;
   	ObjectOutputStream out;
    	ObjectInputStream in;
    	String mensaje;

    	Cliente(){}

    	void run()	{
   		try{
   			//1. Creamos un socket para conectarnos con el servidor
   			socketServidor = new Socket("localhost", 2004);
   			System.out.println("Conectado a localhost en el puerto 2004");

   			//2. Manejamos los Input y Output streams
   			out = new ObjectOutputStream(socketServidor.getOutputStream());
   			out.flush();
   			in = new ObjectInputStream(socketServidor.getInputStream());

   			//3: Nos comunicamos con el servidor
   			do{
   				try{
   					mensaje = (String)in.readObject();
   					System.out.println("Servidor dice: " + mensaje);
   					enviarMensaje("Hola Servidor");
   					mensaje = "chau";
   					enviarMensaje(mensaje);
   				}
   				catch(ClassNotFoundException classNot){
   					System.err.println("Datos recibidos en formato desconocido");
   				}
   			}while(!mensaje.equals("chau"));
   		}
   		catch(UnknownHostException unknownHost){
   			System.err.println("Estás tratrando de conectarte a un host desconocido!");
   		}
   		catch(IOException ioException){
   			//ioException.printStackTrace();
   			System.err.println(" ");
   			System.err.println(" ");
   			System.err.println("Antes hay que iniciar el servidor!");
   			System.err.println(" ");
   			System.err.println(" ");
   		}
   		finally{
   			//4: Cerramos la conexión
   			try{
   				in.close();
   				out.close();
   				socketServidor.close();
   			}
   			catch(IOException ioException){
   				ioException.printStackTrace();
   			}
   		}
   	}

   	void enviarMensaje(String mensaje){
   		try{
   			out.writeObject(mensaje);
   			out.flush();
   			System.out.println("Cliente dice: " + mensaje);
   		}
   		catch(IOException ioException){
   			ioException.printStackTrace();
   		}
   	}

   	public static void main(String args[])	{
   		Cliente cliente = new Cliente();
   		cliente.run();
   	}
   }
Anuncios
Publicado en java.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s