You are on page 1of 7

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 conexin. 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 conexin con el servidor. Es aqui cuando el servidor acepta esa conexin y se puede decir que estos programas estan "conectados", de este modo pueden intercambiar informacin. 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 conexin 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 programacin 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 conexin A continuacin les dejo este cdigo de un servidor muy simple que yo hice en Java, lo que hace es escuchar el puerto 5000, cuando un cliente se conecta este enva un mensaje de confirmacin al cliente, luego el cliente al enviar su primer mensaje, el servidor enva un segundo mensaje y se cierra la conexin. Tambin el de un cliente muy muy simple solo para que se vea la diferencia, de como se pide la conexin al servidor, el cliente nicamente enva un mensaje de texto pero no recibe informacin.
CODIGO FUENTE DEL SERVIDOR

view source print?


01 import java.net.*; 02

03 import java.io.*; 04 05 06 07 /** 08 09 * 10 11 * @author Jorge V 12 13 */ 14 15 16 17 public class Conex { 18 19 20 21 final int PUERTO=5000; 22 23 ServerSocket sc; 24 25 Socket so; 26 27 DataOutputStream salida; 28 29 String mensajeRecibido; 30 31 //SERVIDOR 32 33 public void initServer() 34 35 {

36 37 BufferedReader entrada; 38 39 40 41 try 42 43 { 44 45 46 47 so=new Socket(); 48 49 System.out.println("Esperando una conexin:"); 50 51 so = sc.accept(); sc = new ServerSocket(PUERTO );/* crea socket servidor que escuchara en puerto 5000*/

view source print?


01 02 03 System.out.println("Un cliente se ha conectado."); 04 05 06 07 //Canales de entrada y salida de datos 08 09 10 11 salida = new DataOutputStream(so.getOutputStream()); 12 entrada = new BufferedReader(new InputStreamReader(so.getInputStream())); //Inicia el socket, ahora esta esperando una conexin por parte del cliente

13 14 15 System.out.println("Confirmando conexion al cliente...."); 16 17 salida.writeUTF("Conexin exitosa...\n envia un mensaje :D"); 18 19 20 21 //Recepcion de mensaje 22 23 mensajeRecibido = entrada.readLine(); 24 25 System.out.println(mensajeRecibido); 26 27 28 29 salida.writeUTF("Se recibio tu mensaje.\n Terminando conexion..."); 30 31 salida.writeUTF("Gracias por conectarte, adios!"); 32 33 System.out.println("Cerrando conexin..."); 34 35 36 37 sc.close();//Aqui se cierra la conexin con el cliente 38 39 }catch(Exception e ) 40 41 { 42 43 System.out.println("Error: "+e.getMessage()); 44 45 }

46 47 } 48 49 }

CODIGO FUENTE CLIENTE SIMPLE

view source print?


01 import java.net.*; 02 03 import java.io.*; 04 05 /** 06 07 * 08 09 * @author Jorge V 10 11 */ 12 13 public class Conex { 14 15 16 17 final String HOST = "localhost"; 18 19 final int PUERTO=5000; 20 21 Socket sc; 22 23 DataOutputStream mensaje; 24

25 DataInputStream entrada; 26 27 //Cliente 28 29 public void initClient() /*ejecuta este metodo para correr el cliente */ 30 31 { 32 33 try 34 35 { 36 37 38 39 40 41 //creamos el flujo de datos por el que se enviara un mensaje 42 43 mensaje = new DataOutputStream(sc.getOutputStream()); 44 45 //enviamos el mensaje 46 47 mensaje.writeUTF("hola que tal!!"); 48 49 //cerramos la conexin 50 51 sc.close(); 52 53 }catch(Exception e ) 54 55 { 56 sc = new Socket( HOST , PUERTO ); /*conectar a un servidor en localhost con puerto 5000*/

57 System.out.println("Error: "+e.getMessage()); 58 59 } 60 61 } 62 63 }

Espero que esta pequea introduccin a los sockets haya sido de ayuda, por favor deja tus comentarios.

You might also like