Socket java

 Estamos acá porque queremos conocer sobre sockets en java, pero primeramente debemos conocer específicamente que es un socket.

¿Qué es un Socket?

Socket podría tener varias definiciones, para comprenderlo mejor Socket es una palabra en idioma inglés que significa enchufe, básicamente en internet un socket significaría algo enchufar 2 maquinas que están separadas física y lógicamente, es decir es conectar remotas para que puedan comunicarse e intercambiar datos.

Como se observa en la figura que refleja la imagen de un socket, un socket puede construirse con cualquier lenguaje de programación en nuestro caso vamos a construir socket en java.

En la figura se observan 2 maquinas un cliente y un servidor unidas por un puente virtual para tender ese puente virtual entre las 2 maquinas necesitamos dirección ip y puerto origen y dirección ip y puerto destino para poder establecer la comunicación.

También se podría definir un socket como un puente virtual que permiten la conexión o comunicación entre un cliente y un servidor atravez de una dirección ip y un puerto.

Para que existen los sockets

1-      Los sockets existen para que 2 computadoras puedan intercambiar información

2-      Para que un cliente y un servidor puedan intercambiar información

Que define a un socket

Un socket se define por 2 direcciones ip origen y destino y 2 puertos origen y destino

Al tema al cual vinimos a explicar sockets en java, básicamente es usar el lenguaje de programación java para crear sockets para conectar 2 o más maquinas.

Socket java

Que necesitamos para construir un Socket en Java

Para construir un socket en java necesitamos 2 aplicaciones una aplicación cliente y una aplicación servidor, es decir una aplicación cliente servidor de cualquier tipo puede ser de consola, gráfica o web para este caso usaremos una aplicación gráfica que se van a comunicar con el socket que vamos a crear.

La construcción del socket en java depende fundamentalmente de un par de variables que sería la dirección ip del servidor y el puerto por donde van a ingresar la información. 

Construyendo las 2 aplicaciones gráficas cliente y servidor

Socket java clienteSocket java servidor



Suponiendo que desarrollamos las 2 aplicaciones cliente servidor, las aplicaciones como mencionamos anteriormente pueden ser aplicaciones de consola, gráficas o web, en lo que respecta este articulo está basado en construir Sockets específicamente con el lenguaje de programación java no se enfoca en construir la aplicación gráfico lo que quieren decir que podemos crear las interfaces gráficas por su cuenta o usar las aplicaciones gráficas que dejamos a disposición.

Por los momentos la aplicación gráfica consiste en un cliente en el cual se va a escribir un texto y el mismo va a viajar a la aplicación servidor que está a la derecha por medio de un socket construido con java. Se deja claro que el objetivo de este artículo no es enseñar a crear una aplicación gráfica. El objetivo es enseñar a construir el socket en java

Construyendo el socket java cliente

1- Para construir un socket en java lo primero que hay que importar el paquete java.net con todas sus clases preferiblemente

2- Luego crear un objeto de la clase Socket podemos resumir toda la creación del socket java con esta instrucción Socket misocket=new Socket("192.168.0.17", 9999); y como el método constructor lanza una excepción debemos tener esto en cuenta a la hora de crear el socket en java.

En resumen una vez importado todo el paquete java.net tenemos más que suficiente para crear nuestro socket en java, construir el socket es tan solo el primer paso ya que solamente el socket es tender el puente por donde van a circular los datos, básicamente crear el socket es crear un objeto de la clase Socket y pasarle como parámetros dos argumentos la dirección ip y puerto del servidor al cual vamos a enviar los datos, todo eso usando el método constructor de la clase Socket

Construyendo el flujo de datos de salida

 Ya construimos el socket java es decir el canal por donde van a circular los datos ahora solamente tenemos que crear el flujo de datos que va a circular dentro del socket java. Para construir el flujo de salida creamos  un objetos de la clase DataOutputStream por ejemplo el objeto flujo_salida

DataOutputStream flujo_salida;

El constructor de la clase DataOutputStream requiere un objeto OutputStream

Constructor Socket java

Ya que el método constructor de la clase DataOutputStream requiere un objeto de tipo OutputStream revisamos la api de java y observamos que en la clase Socket entre sus métodos tiene un método getOutputStream que devuelve un objeto del tipo que nos pide la constructor de la clase DataOutputStream, como podemos observar para construir nuestro socket java hay que usar varias clases.

 El método getOutputStream devuelve el objeto que requiere la clase DataOutputStream

Socket cliente
Como usamos el metodo
socket flujo java

Como podemos observar en la imagen la programación realizada para construir nuestro Socket en java.

 

Vamos a realizar un resumen de cómo construir nuestro socket en java esencialmente el java socket. Resumido en pasos

1-      Creamos un objeto de la clase Socket el cual se llama misocket el cual recibe como parámetros la dirección ip del servidor y el puerto por el cual va a introducir la información. En este punto es como haber tendido el puente virtual desde el cliente al servidor

2-      Creamos el flujo de salida que va del cliente al servidor con el objeto flujo de salida de la clase DataOutputStream, el método constructor de la clase DataOutputStream recibe como parámetro un objeto OutputStream. Entonces el método getOutputStream devuelve un OutpuStream es decir flujo de salida de este Socket misocket que viene a ser el socket misocket por el cual va a circular el flujo de salida.

La construcción de un socket en java es un arte

Sockets java Standart Edition

Lo que quiere decir esta instrucción es que: hemos construido un flujo_salida de este tipo DataOutputStream el cual va a circular por este Socket misocket.

 En la siguiente imagen observamos el objeto flujo_salida que lo quiere decir es escribe en el flujo_salida lo que hay en campo1.getText

flujos socket

De esta manera casi terminamos, lo que falta por programar nuestro socket en java es cerrar el flujo

Imagenes de sockets

Cerrando el flujo terminamos de programar nuestro nuestro socket java cliente.

 

Creando Socket java servidor

El socket java servidor debe realizar 2 tareas

1-      Recibir el texto que le va a enviar el cliente

2-      En segundo plano el servidor java socket tendrá que mantenerse a la escucha manteniendo el puerto 9999 abierto

Tenemos que hacer que la clase que construye el marco donde se va a observar el texto se mantenga permanentemente a la escucha.

¿Cómo conseguimos esto?

Implementamos la interfaz Runnable y sobre escribir los métodos de la interfaz

clases de flujo

Al implementar la interfaz Runnable se crea el método run y el código que se va a mantener a la escucha debe ir dentro de este método anexo imagen

java socket

Creamos el hilo en nuestro servidor socket java 


socket hilo

Colocar el servidor a la escucha en el puerto 9999

Como observaremos en la imagen que está abajo creamos el objeto servidor de tipo ServerSocket esa clase tiene un método constructor que recibe un parámetro de tipo int en el cual se indica el puerto que va a estar a la escucha

Socket stream


El siguiente paso que vamos a ejecutar en nuestro socket java servidor es aceptar las conexiones que provengan del exterior para esto visitamos la api java y usamos el método accept que devuelve un socket

 

clase java socket

Procedemos de la siguiente manera

Socket misocket=servidor.accept();

El siguiente paso sería crear el flujo de entrada

java flujo socket

Con estas instrucciones tenemos nuestro socket java creado especificando nuestro java socket servidor.

Comentarios