SOCKETS en JAVA

Mecanismos de comunicación entre programas a través de una red TCP/IP. Estos realizan la interfaz entre aplicación y protocolo. Dichos mecanismos pueden tener lugar dentro de la misma máquina o a través de una red, en forma cliente-servidor. Java proporciona para esto las clases ServerSocket, Socket,InetAddress, etc…

Para establecer la conexión a través de un socket, tenemos que programar por un lado el servidor y por otro los clientes. En el servidor utilizaremos la clase ServerSocket y en el cliente la clase Socket, utilizando el método accept() para esperar algún cliente. Una vez establecida la conexión podremos intercambiar datos utilizando los Streams.

 

SERVIDORES

Como se ha visto antes Java admite conectores de servidor. Los ServerSocket se utilizan para crear servidores en Internet (programas que están esperando a programas cliente locales). Estos conectores tienen un método adicional accept() que se bloquea y espera que un cliente inicie la comunicación para devolver un Socket y devolver la comunicación al cliente.

 

OBJETO SERVERSOCKET :

ServerSocket obj_server=new ServerSocket(int puerto);

 

OBJETO SOCKET : para poder recibir al cliente.

Socket obj_cliente;

RECIBIR LA COMUNICACIÓN (ACCEPT):

obj_cliente=obj_server.accept();

 

DEVOLVER LA COMUNICACIÓN(PRINTSTREAM): muy parecido a un println.

PrintStream obj;

obj=new PrintStream(obj_cliente.getOutputStream());

 

CLIENTES

Los conectores TCP/IP (Socket) se utilizan para implementar conexiones entre nodos de Internet . Estos conectores pueden examinar en cualquier momento la información de dirección y puerto asociado con ellos y acceder a los flujos E/S que se han visto anteriormente.

CREAR SOCKET: dos métodos para la creación.

Socket obj_clie=new Socket(direccion, int puerto);

Socket obj_clie=new Socket(String nodo, int puerto);

 

METODOS ASOCIADOS:

obj_clie.metodo();

metodo()

DESCRIPCIÓN

getInetAddress() Devuelve la dirección a la que esta conectado.
getPort() Devuelve el puerto remoto que esta conectado.
getLocalPort() Devuelve el puerto local que esta conectado.
getInputStream() Devuelve el flujo de entrada al cliente.
getOutputStream() Devuelve el flujo de salida al cliente.
close() Cierra los Streams.

 

La clase InetAddress se utiliza para obtener los nombres de los nodos y sus direcciones IP. Los métodos de esta clase están siempre asociados a Socket. La excepción que lanzan en caso de error es UnknownHostException. Nos van a servir de gran apoyo a la hora de utilizar los Socket. La clase InetAddress no tiene constructores visibles, son métodos estáticos.

BUSCAR NODO LOCAL:

InetAddress obj=InetAddress.getLocalHost();

 

BUSCAR NODO POR NOMBRE:

InetAddress obj=InetAddress.getByName(“nombre”);

 

BUSCAR TODOS LOS NODOS POR NOMBRE:

InetAddress obj[]=InetAddress.getAllByName(“nombre”);

 

OBTENER NOMBRE DE HOST:

String=obj_socket.getHostName();

 

OBTENER DIRECCION:

byte[]=obj_socket.getAddress();

 

OBTENER NOMBRE E IP DEL NODO:

String=obj_socket.toString();

 

 

 

EJEMPLO: En este ejemplo se crean dos códigos fuente, un para el servidor y otro para el cliente. Para ejecutarlos deberemos tener una ventana para el servidor y otra para el cliente. Primero ejecutamos el servidor que esta funcionando indefinidamente y en la otra ventana iremos ejecutando repetidas veces el cliente. El resultado es un contador de visitas a ese servidor que nosotros hemos creado.

/*****PROGRAMA SERVIDOR  (SOC.JAVA)******/

import java.io.*;

import java.net.*;

public class soc{

public static void main(String args[]){

       ServerSocket servidor;

       Socket cliente;

int num_cliente=0;

try{

servidor=new ServerSocket(5000);

do{

num_cliente++;

             cliente=servidor.accept();

System.out.println(«Cliente: «+num_cliente);

             PrintStream ps;

              ps=new PrintStream(cliente.getOutputStream());

ps.println(«Es el cliente: «+num_cliente);

             cliente.close();

}while(true);

}

catch(Exception e){}

}

}

 

/**** PROGRAMA CLIENTE (CLIE.JAVA)*****/

import java.io.*;

import java.net.*;

public class clie{

public static void main(String args[]){

     InetAddress direccion;

     Socket servidor;

int num_cliente=0;

try{

       direccion=InetAddress.getLocalHost();

       servidor=new Socket(direccion,5000);

DataInputStream datos;

datos=new DataInputStream(servidor.getInputStream());

System.out.println(datos.readLine());

       servidor.close();

}

catch(Exception e){}

}

}


0 comentarios

Deja una respuesta

Marcador de posición del avatar

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