PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA



Documentos relacionados
1.- FUNDAMENTOS FUNCIONAMIENTO GENÉRICO JAVA SOCKETS Creación de Streams de Entrada...7

Sockets en Java. La Creatividad proviene de un conflicto de ideas. Uso de Sockets

Federico Peinado

PROTOCOLOS DE RED SMTP

Las clases Java Socket y ServerSocket

Práctica 4: Java Remote Method Invocation (RMI)

Aplicaciones Cliente/Servidor en Gambas Prof: Mileti, P.

COMUNICACIÓN ENTRE PROCESOS SOCKETS

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

Manual de Configuración del Microsoft Outlook Express:

INSTALACION DEL Terminal Services. Instalamos el Terminal Services. Siguiente. Nos saldrá una advertencia, seleccionamos instalar.

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

ENVÍO DE POR MEDIO DE SMTP

Manual de Configuracion del Microsoft Outlook Express:

Lab 01: Programación de Sockets en TCP

Sockets en Java. Prof. Wílmer Pereira Universidad Simón Bolívar

Examen de Redes - Primer Parcial - ETSIA 26 de Enero de 2006

GESTIÓN DE EXCEPCIONES EN JAVA. CAPTURA CON BLOQUES TRY CATCH Y FINALLY. EJEMPLOS RESUELTOS. (CU00927C)

UNIVERSIDADE DA CORUÑA Departamento de Tecnoloxías da Información e as Comunicacións LABORATORIO DE RC: TUTORIAL DE SOCKETS EN JAVA

UNIVERSIDAD CARLOS III DE MADRID DEPARTAMENTO DE INGENIERÍA TELEMÁTICA. Daniel Díaz Sánchez

TciSatSingleW32 Versión 3.1

Cliente/Servidor en Java

PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Práctica 2: Java Remote Method Invocation (RMI)

El correo electrónico o es el servicio más utilizado de Internet, junto con la Web. Hay varios tipos de cuentas, POP, IMAP y SMTP.

Práctica GESTIÓN Y UTILIZACIÓN DE REDES LOCALES. Curso 2001/2002. TCP/IP: protocolo TCP

Configurar cuenta de correo en Outlook 2010

Instalación, creación y configuración del servicio FTP

WINDOWS : SERVIDOR DHCP

Práctica 5: Servidor web concurrente en Java

Curso de Redes Computadores 1 Tema 3 Introducción a la capa de transporte. Interfaz de programación en redes. Sockets.

En el presente capítulo se describe la programación del instrumento virtual y cómo

Modelo de Objetos Distribuidos

Tutorial BMS Server Studio UDP

Computación III. Objetivo de aprendizaje del tema

Crear un servidor FTP

Manual del Protocolo XML-RPC de Mensajería Negocios

Eurowin 8.0 SQL. Manual de la FIRMA DIGITALIZADA

Práctica 3: Estudio de los protocolos HTTP, SMTP, POP3 e IMAP mediante un analizador de red: Wireshark

Instrucciones de instalación de IBM SPSS Modeler (licencia de usuario autorizado)

COMUNICACION DE PLC S MEDIANTE EL PUERTO RS- 485 Y MONITOREADO POR PANTALLA.

Instalar protocolo, cliente o servicio nuevo. Seleccionar ubicación de red. Práctica - Compartir y conectar una carpeta

El protocolo IMAP ofrece la descarga de correos en modo sólo lectura, es decir descarga sólo una copia del correo y no permite el borrado.

Manual del panel. Core-Admin

Unidad Didáctica 12. La publicación


PRACTICA CAPITULO 2 MODULO 1 PROTOCOLOS Y LA FUNCIONALIDAD DE LA CAPA DE APLICACIÓN

Estructura de datos tipo vector.

FUNDAMENTOS DE REDES CONCEPTOS DE LA CAPA DE APLICACIÓN

Capítulo 5. Cliente-Servidor.

DIPLOMADO EN SEGURIDAD INFORMATICA

Benemérita Universidad Autónoma del Estado de Puebla

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

INTERNET 4º ESO INFORMATICA / DEP. TECNOLOGIA

Sensor de Temperatura utilizando el Starter Kit Javelin Stamp. Realizado por: Bertha Palomeque A. Rodrigo Barzola J.

Roles y Características

La vida en un mundo centrado en la red

Modulo 1 El lenguaje Java

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

Luis Eduardo Peralta Molina Sistemas Operativos Instructor: José Doñe Como crear un Servidor DHCP en ClearOS

QUÉ ES UN SERVIDOR Y CUÁLES SON LOS PRINCIPALES TIPOS DE SERVIDORES? (PROXY, DNS, WEB, FTP, SMTP, ETC.) (DV00408A)

Introducción a Java III. Prof. MSc. Pedro Shiguihara

Capítulo V. Implementación

INSTALACIÓN Y CONFIGURACIÓN DEL JANA SERVER

INSTITUTO TECNOLOGICO SUPERIOR DE TEZIUTLAN CONFIGURACION Y ADMON DE REDES

Activación de un Escritorio Remoto

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Tekla Structures Guía Rápida de Licencias. Versión del producto 21.1 agosto Tekla Corporation

Instalación del Admin CFDI

TEMA 2: FUNCIONAMIENTO DE INTERNET.

1. Visión general de RMI

Práctica 3 de Redes de Área Local Cliente y Servidor de ficheros concurrente

Crear un servidor Web en IIS

SERVICIOS DE INTERNET COACAN.ES.

WINDOWS : TERMINAL SERVER

Guia rápida EPlus Cliente-Servidor

Introducción a las Redes de Computadoras. Obligatorio

D.T.Informática S.L. [Sistema hada] hilo Administrador Desarrollo Activo

Conexión a red LAN con servidor DHCP

LABORATORIO DE RC PRÁCTICA 2: IMPLEMENTACIÓN DE UN CLIENTE Y SERVIDOR DE

Configuración para Office Outlook:

PROGRAMA DE CONFIGURACION

Computadores y Comunicaciones. Práctica de Laboratorio: Diseño de una aplicación basada en el modelo cliente-servidor

Instalación y Configuración de un Servidor FTP

FACULTAD DE INGENIERÍA

Comunicación de PC mediante puerto serie

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Sistemas Rapidlogger

LABORATORIO DE RC: PRÁCTICA 4: IMPLEMENTACIÓN DE UN CLIENTE DE CORREO

DISPOSITIVO DE BANDA ANCHA

Nos pedirá el usuario y contraseña de nuestro MODEM, estos datos se los proporciona su proveedor de Internet.

Acceder a correo de 1000tentaciones.com a través de web.

Introduciendo datos desde el

Objetivos de la práctica: - Practicar uso de ficheros: abrir, cerrar y tratamiento de información contenida en el fichero.

INDICE. Página 2 de 23

Comunicacion en Java. Alejandro Escobar

Transcripción:

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA Qué es la arquitectura cliente servidor? La arquitectura cliente-servidor es un modelo de aplicación distribuida en el que las tareas se reparten entre los proveedores de recursos o servicios, llamados servidores, y los demandantes, llamados clientes. Es decir, un cliente es el que hace una solicitud de un servicio a un servidor y el servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta. Qué es un socket? Los sockets son un sistema de comunicación entre procesos de diferentes máquinas de una red. Más exactamente, un socket es un punto de comunicación por el cual un proceso puede emitir o recibir información. Cómo funciona un socket? El modelo básico de los sockets consta de 2 simples programas, un servidor y un cliente. Básicamente el programa SERVIDOR comienza a escuchar en un puerto determinado (nosotros lo especificamos), y posteriormente el programa CLIENTE debe conocer la IP o nombre de dominio/hostname del servidor y el puerto que está escuchando. El socket sigue normalmente realiza los procesos de Abrir-Leer-Escribir-Cerrar. Antes de que un proceso de usuario pueda realizar operaciones de entrada/salida, debe hacer una llamada a Abrir (open), luego realizar llamadas a Leer (read) y Escribir (write), para la lectura y escritura de los datos y una vez concluido el intercambio de información, el proceso de usuario llamará a Cerrar (close) para informar que ha finalizado. Un proceso tiene un conjunto de descriptores de entrada/salida desde donde leer y por donde escribir. Estos descriptores pueden estar referidos a ficheros, dispositivos, o canales de comunicaciones llamados sockets. El ciclo de vida de un descriptor, aplicado a un canal de comunicación (por ejemplo, un socket), está determinado por tres fases: Creación, apertura del socket Lectura y Escritura, recepción y envío de datos por el socket Destrucción, cierre del socket

En un esquema más completo donde se tiene muchos clientes con peticiones a un solo servidor se puede apreciar cómo se realiza la comunicación con el siguiente esquema que se muestra.

Ejemplo 1 SALUDO DE BIENVENIDA El siguiente programa establece una conexión básica entre un servidor y un cliente Donde una vez establecida la conexión el servidor solicita el nombre del cliente, el cliente introduce su nombre, y el servidor le da una bienvenida mediante un mensaje. Programa Servidor //Declaramos librerías necesarias import java.io.*; import java.net.*; import java.util.scanner; public class Servidor { private ServerSocket sservidor; //Socket del servidor private Socket scliente; //Socket para el cliente private Scanner entrada; //Flujo de Entrada para envio de datos private PrintStream salida; //Flujo de Salida para recepcion de datos private int puerto; // Puerto por el cual escuchara el servidor public Servidor(int p){ puerto=p; public void iniciar(){ try { //Se Crea el socket del servidor sservidor =new ServerSocket(puerto); System.out.println(" - SERVIDOR INICIADO - "); System.out.println(" - Espèrando Cliente - "); //El metodo accept(), espera hasta que un cliente realice una conexión //Una vez que se ha establecido una conexión por el cliente, este //método devolverá un objeto tipo Socket, a través del cual se establecerá //la comunicación con el cliente scliente=sservidor.accept(); //Obtengo una referencia a los flujos de datos de entrada y salida del socket cliente entrada =new Scanner(sCliente.getInputStream()); salida =new PrintStream(sCliente.getOutputStream()); ////Esta sección puede ser modificada según nuestros requerimientos////////// System.out.println("Cliente Conectado:"+ scliente.getinetaddress() +":"+ scliente.getport() ); salida.println("ejemplo1-saludo"); salida.print("ingrese Su Nombre ->"); String nombre= entrada.next(); salida.println("bienvenido "+ nombre); ///////////////////////////////////////////////////////////////////////////// //Cerramos la conexión finalizar (); public void finalizar(){ try { entrada.close(); salida.close(); scliente.close(); sservidor.close(); System.out.print("Conexion Finalizada...");

catch (IOException e) { public class Main { public static void main(string arg[]){ Servidor x=new Servidor(9998); x.iniciar(); Capturas Iniciando el servidor Estableciendo conexión desde el cliente mediante telnet Resultado, una vez introducido nuestro nombre el servidor nos manda un mensaje de bienvenida

Ejemplo 2 Chat simple El siguiente programa establece una conexión básica entre un servidor y un cliente Donde una vez establecida la conexión el servidor y el cliente, pueden chatear entre ellos, hasta que los dos introduzcan la palabra bye. Programa Servidor //Importamos librerías necesarias import java.io.*; import java.net.*; import java.util.scanner; import java.awt.event.*; public class Servidor { private ServerSocket sservidor; //Socket del servidor private Socket scliente; //Socket para el cliente private Scanner entrada; //Flujo de Entrada para envio de datos private PrintStream salida; //Flujo de Salida para recepcion de datos private int puerto; // Puerto por el cual escuchara el servidor private String mensaje_enviar=""; private String mensaje_recibido=""; private javax.swing.timer t; //Declaramos un Timer public Servidor (int p){ puerto=p; ); //El timer será el encargado de ejecutar este bloque de código cada 500 [ms] //Es decir, que este leerá y mostrara los mensajes recibidos cada 0.5 segundos //siempre o cuando se haya creado una conexión y exista un mensaje. t = new javax.swing.timer(500,new ActionListener() { public void actionperformed(actionevent e) { if (scliente.isconnected() &&!mensaje_recibido.equals("bye")){ mensaje_recibido=entrada.next(); System.out.println("Cliente_dice:"+mensaje_recibido); public void iniciar(){ //Inicamos el servidor sservidor =new ServerSocket(puerto); System.out.println(" - SERVIDOR INICIADO- "); System.out.println("- Esperando cliente..."); //El metodo accept(), espera hasta que un cliente realice una conexión //Una vez que se ha establecido una conexión por el cliente, este //método devolverá un objeto tipo Socket, a través del cual se establecerá //la comunicación con el cliente. scliente=sservidor.accept(); //Obtengo una referencia a los flujos de datos de entrada y salida del socket cliente salida=new PrintStream(sCliente.getOutputStream()); entrada =new Scanner(sCliente.getInputStream()); System.out.println("Cliente conectado "+ scliente.getinetaddress()+":"+ scliente.getport()+"\n"); //iniciamos el timer t.start(); Scanner lector=new Scanner(System.in); //Escribimos los mensajes hacia el cliente

while(!mensaje_recibido.equals("bye")) { mensaje_enviar=lector.next(); salida.println("servidor Dice : " +mensaje_enviar); //Terminamos la conexión public void finalizar(){ t.stop(); salida.close(); entrada.close(); scliente.close(); sservidor.close(); public class Main { public static void main(string arg[]){ Servidor x=new Servidor(9999); x.iniciar(); Capturas Iniciando el servidor Conectando el cliente al servidor

Resultado, una vez establecida la conexión podemos proceder a chatear entre un servidor y un cliente. Ejemplo 3 Eco El siguiente programa establece una conexión básica entre un servidor y un cliente Donde una vez establecida la conexión el servidor solicita que introduzca un texto al cliente y el servidor devuelve un eco, es decir el mismo mensaje que se envió. A continuación se implementa el programa del servidor conjuntamente el programa del cliente. Programa Servidor import java.io.*; import java.net.*; import java.util.*; public class Servidor { private ServerSocket sservidor; private Socket scliente; private Scanner entrada; private PrintStream salida; private int puerto; private String mensaje="";

public Servidor (int p){ puerto =p; public void iniciar(){ sservidor=new ServerSocket(puerto); System.out.println(" - SERVIDOR INICIADO - "); System.out.println(" - Esperando Cliente - "); scliente=sservidor.accept(); entrada=new Scanner(sCliente.getInputStream()); salida = new PrintStream(sCliente.getOutputStream()); //Se reenvía los mensajes que van llegando hasta q el cliente introduzca la palabra // bye, while(!mensaje.equals("bye")){ mensaje=entrada.next(); System.out.println("Mensaje cliente: "+mensaje); salida.println("eco:_"+mensaje); public void finalizar(){ salida.close(); entrada.close(); scliente.close(); sservidor.close(); System.out.print("Conexion Finalizada!!"); catch(exception e) { public class MainServidor { public static void main(string arg[]){ Servidor x=new Servidor(9990); x.iniciar(); Programa Cliente import java.io.*; import java.net.*; import java.util.scanner; public class Cliente { private Socket scliente; private Scanner entrada; prívate PrintStream salida; prívate String host; //IP del servidor con el que me voy a conectar private int puerto; private String mensaje=""; public Cliente(String h, int p){ host=h; puerto=p; public void iniciar(){

//Estableciendo conexion con el servidor scliente =new Socket(host,puerto); System.out.println("CONEXION INICIADA"); System.out.println("Conectado a : "+ scliente.getremotesocketaddress()); //Obtengo una referencia a los flujos de datos de entrada y salida salida=new PrintStream(sCliente.getOutputStream()); entrada=new Scanner(sCliente.getInputStream()); //Este bloque de código se encarga de enviar mensajes al servidor hasta que //este introduzca la palabra bye Scanner lectura=new Scanner(System.in); while (!mensaje.equals("bye")){ public void finalizar(){ salida.close(); entrada.close(); scliente.close(); System.out.print("\nDigite mensaje :"); mensaje=lectura.next(); salida.println(mensaje); System.out.print(entrada.next()); public class MainCliente { public static void main(string arg[]){ Cliente c=new Cliente("127.0.0.1", 9990); c.iniciar();

Capturas Iniciando el servidor Estableciendo conexión desde el cliente, iniciando cliente Resultados, enviando mensajes y retornado ecos Por parte del cliente Por parte del servidor

Ejemplo 4 Enviar un correo mediante un socket cliente. El siguiente programa cliente establece envía un correo mediante SMTP. En este ejemplo se enviara un correo electrónico a un servidor SMTP (implementado en el laboratorio anterior). Cabe notar que solo es necesario codificar el programa cliente, debido a que el protocolo SMTP ya esta implementado y configurado con Postfix. Programa Cliente //Importando librerías necesarias import java.io.*; import java.net.*; import java.util.scanner; public class Cliente { private Socket scliente; private Scanner entrada; private PrintStream salida; private String host=""; private int puerto; public Cliente(String h, int p){ host=h; puerto=p; public void iniciar(string correoorigen, String correodestino, String asunto,string mensaje){ //Estableciendo conexion con el servidor SMTP scliente =new Socket(host,puerto); System.out.println("CONEXION INICIADA"); System.out.println("Conectado a : "+ scliente.getremotesocketaddress()); //Obtengo una referencia a los flujos de datos de entrada y salida salida=new PrintStream(sCliente.getOutputStream()); entrada=new Scanner(sCliente.getInputStream()); //Escribiendo el correo (Notese que se sigue el formato propio del SMTP ) System.out.println(entrada.nextLine()); //Respuesta del servidor salida.println("mail FROM: "+correoorigen); //Correo de Origen System.out.println(entrada.nextLine()); //Respuesta del servidor salida.println("rcpt TO: "+correodestino); //Correo de Destino System.out.println(entrada.nextLine()); //Respuesta del servidor salida.println("data"); //Indicamos q mandaremos un Mensaje salida.println("subject: "+asunto); //Asunto del correo System.out.println(entrada.nextLine()); //Respuesta del servidor salida.println(mensaje); //Mensaje salida.println("."); salida.println("."); //Terminamos el mensaje salida.println("quit"); System.out.println(entrada.nextLine()); //Respuesta del servidor System.out.println("\nCorreo Enviado!"); public void finalizar(){ salida.close(); entrada.close(); scliente.close();

public class MainCliente { Capturas public static void main(string [] args) { Cliente c=new Cliente("127.0.0.1", 25); //Servidor SMTP c.iniciar("jaime@info.net", //Correo Origen "telematica@info.net", //Correo Destino "Prueba De envió Socket", //Asunto "Hola servidor esta es una prueba de Correo mediante Sockets"); //Mensaje Asumiendo que el servidor está bien configurado y se encuentra en marcha, procedemos a mandar el correo. Ingresando al cliente de correo (Thunderbird que configuramos el anterior laboratorio)

Revisamos si el correo llego en forma adecuada. NOTA * 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 o solo programar el cliente y acceder a un servidor ya existente. * Cuando se selecciona un número de puerto, se debe tener en cuenta que los puertos en el rango 0-1023 están reservados. Estos puertos son los que utilizan los servicios estándar del sistema como email, ftp, http, dns, dhcp, etc. Por lo que, para aplicaciones de usuario, el programador deberá asegurarse de seleccionar un puerto por encima del 1023. * 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. * Si las pruebas son realizadas en Windows 7, es necesario habilitar el telnet en Panel de control -> Desinstalar un programa -> Activar o desactivar las características de Windows - > cliente telnet.