Tag Archive for sockets en javajava socketscliente socket javaservidor socket java

Sockets en Java (cliente y servidor)

 

Sockets en Java

(el codigo fuente esta mas abajo…)

Los sockets son basicamente formas en las que podemos interconectar 2 (o mas) programas mediante el uso de la internet. En java se utilizan para poder crear conexiones utilizando basicamente una IP/hostname y un puerto para establecer la conexión. Para aprender podemos utilizarla para conenctar 2 programas por medio de Internet.

¿Como funciona?

El modelo mas basico de los sockets consta de 2 simples programas, un servidor y un cliente. Basicamente el programa servidor comienza a “escuchar” en un puerto determinado(nosotros lo especificamos), y posteriormente el programa que la hace de “cliente” debe conocer la ip o nombre de dominio/hostname del servidor y el puerto que esta escuchando, al saber esto simplemente solicita establecer una conexión con el servidor. Es aqui cuando el servidor acepta esa conexión y se puede decir que estos programas estan “conectados”, de este modo pueden intercambiar información. En el siguiente video muestro un programa servidor con sockets, explico mas o menos el codigo, en que consiste y hago una prueba en el cual la conexión es exitosa.

Video de Sockets en java

Notas:
*Ambos programas (servidor y cliente) no necesitan estar programados en Java, es posible programarlos en lenguajes de programación diferentes, o inclusive programar un servidor en java y utilizar un cliente ya existente que pueda conectarse a un puerto especificado.

*El cliente debe de conocer tanto el puerto a utilizar como la IP o dominio del servidor, mientras el servidor solo debe conocer el puerto de conexión

A continuación les dejo este código de un servidor muy simple que yo hice en Java, lo que hace es escuchar el puerto 5000, cuando un cliente se conecta este envía un mensaje de confirmación al cliente, luego el cliente al enviar su primer mensaje, el servidor envía un segundo mensaje y se cierra la conexión. También el de un cliente muy muy simple solo para que se vea la diferencia, de como se pide la conexión al servidor, el cliente únicamente envía un mensaje de texto pero no recibe información.

Codigo fuente del servidor

 

import java.net.*;

import java.io.*;

/**

*

* @author Jorge V

*/

public class Conex {

final int PUERTO=5000;

ServerSocket sc;

Socket so;

DataOutputStream salida;

String mensajeRecibido;

//SERVIDOR

public void initServer()

{

BufferedReader entrada;

try

{

sc = new ServerSocket(PUERTO );/* crea socket servidor que escuchara en puerto 5000*/

so=new Socket();

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

so = sc.accept();
//Inicia el socket, ahora esta esperando una conexión por parte del cliente

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

//Canales de entrada y salida de datos

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

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

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

salida.writeUTF("Conexión exitosa...n envia un mensaje :D");

//Recepcion de mensaje

mensajeRecibido = entrada.readLine();

System.out.println(mensajeRecibido);

salida.writeUTF("Se recibio tu mensaje.n Terminando conexion...");

salida.writeUTF("Gracias por conectarte, adios!");

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

sc.close();//Aqui se cierra la conexión con el cliente

}catch(Exception e )

{

System.out.println("Error: "+e.getMessage());

}

}

}

 

Codigo fuente cliente simple

 

 

import java.net.*;

import java.io.*;

/**

*

* @author Jorge V

*/

public class Conex {

final String HOST = "localhost";

final int PUERTO=5000;

Socket sc;

DataOutputStream mensaje;

DataInputStream entrada;

//Cliente

public void initClient() /*ejecuta este metodo para correr el cliente */

{

try

{

sc = new Socket( HOST , PUERTO ); /*conectar a un servidor en localhost con puerto 5000*/

//creamos el flujo de datos por el que se enviara un mensaje

mensaje = new DataOutputStream(sc.getOutputStream());

//enviamos el mensaje

mensaje.writeUTF("hola que tal!!");

//cerramos la conexión

sc.close();

}catch(Exception e )

{

System.out.println("Error: "+e.getMessage());

}

}

}

 

Espero que esta pequeña introducción a los sockets haya sido de ayuda, por favor deja tus comentarios{jcomments on}.