EJEMPLOS PROGRAMACIÓN SOCKET - JAVA



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

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

Arquitecturas cliente/servidor

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

PROGRAMACION DISTRIBUIDA

Federico Peinado

Lab 01: Programación de Sockets en TCP

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

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

Sockets. Introducción. Las redes de computadoras permiten al usuario. Curso Propedéutico Maestría en Ciencias de la Computación BUAP

1 SOCKETS EN JAVA. Sistemas Distribuidos::Sockets en Java EUI-SG/INFOR.UVA.ES 1

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

Tutorial BMS Server Studio UDP

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

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

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

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

Las clases Java Socket y ServerSocket

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

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

Modelo de Objetos Distribuidos

Práctica 5: Servidor web concurrente en Java

Manual del Protocolo XML-RPC de Mensajería Negocios

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

Manual de software. Dynamic Cloud. 10/2014 MS-Dynamic_Cloud v1.2

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

Práctica III: Streams, Readers y Writers

Cliente/Servidor en Java

Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

INSTITUTO TECNOLÓGICO DE SALINA CRUZ. Fundamentos De Redes. Semestre Agosto-Diciembre Reporte De Lectura

Clases Java para comunicaciones en red

Modulo 1 El lenguaje Java

INTERNET 4º ESO INFORMATICA / DEP. TECNOLOGIA

Programación Orientada a Objetos. Tema 7: Persistencia

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Programación Orientada a Objetos. Java: Excepciones

CLASE SOCKET. 1. Crear un nuevo socket usando un constructor de la clase. 2. El socket trata de conectarse al host remoto.

EL MODELO DE ESTRATIFICACIÓN POR CAPAS DE TCP/IP DE INTERNET

COMUNICACIÓN ENTRE PROCESOS SOCKETS

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

Manejo básico de record store RMS en aplicaciones móviles con J2ME. Por: Rubén Dario Orozco

Excepciones. Gonzalo Méndez - Dpto. Ingeniería de Software e Inteligencia Artificial. Excepciones

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

DISEÑO DE UNA ARQUITECTURA CLIENTE/SERVIDOR MEDIANTE OBJETOS DISTRIBUIDOS EN JAVA

Universidad de Cantabria

Activación de un Escritorio Remoto

RMI [Remote Method Invocation]

Desarrollar, usando Java, un cliente básico del protocolo web que permita enviar una solicitud HTTP a un servidor web y procesar la respuesta.

Programación para redes con Java

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

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

Introducción al lenguaje Java

Problemas de Redes de Computadores. Conjunto de problemas 1

Introduciendo datos desde el

Paso de mensajes en Java

ARQUITECTURAS CLIENTE/SERVIDOR

CÓMO FUNCIONA EL CORREO ELECTRÓNICO?

EJERCICIOS DEL TEMA 1

Programación Orientada a Objetos. Java: Excepciones

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

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

Redes de Área Local: Configuración de una VPN en Windows XP

MANUAL TÉCNICO DEL PROXY UTN

Tema 4.1: - TRANSPORTE-

Pruebas de unidad con JUnit

TEMA 3. CLASES. EJERCICIOS

11. Algunas clases estándar de Java (II)

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

Ficheros de acceso aleatorio

Tema II. Sockets. Desarrollo de Aplicaciones para Internet Curso Miguel Reboiro Jato

CONFIGURACIÓN BÁSICA DE UNA VPN EN WINDOWS XP PROFESIONAL

Redes Locales: El protocolo TCP/IP

Redes (IS20) Ingeniería Técnica en Informática de Sistemas. CAPÍTULO 8: El nivel de transporte en Internet

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

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

Actividades de Divulgación del Centro Atómico Bariloche. Qué hay detrás de un programa de computadora? Daniela Arnica Pablo E. Argañaras.

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

Comunicación CPU S Vs CPU S por TCP

Programación Orientada a Objetos con Java

Comunicación entre procesos: sockets udp. Jorge Iván Meza Martínez

MICQ. Trabajo Práctico Final Seminario de Ingeniería en Informática I Facultad de Ingeniería, UBA. Junio Cátedra: Pablo Cosso

Examen Septiembre Curso Programación en C++ Pág. 1

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

Arquitecturas cliente/servidor

HOW TO SOBRE REMOTE ACCESS VPN MODE EN LINUX

MANUAL DE INICIACIÓN A JOVELLANOS VIRTUAL J. A. Espejo coordinador.tic@iesjovellanos.org 1

MANUAL PARA GESTIÓN DE INCIDENCIAS INFORMÁTICAS

FACULTAD DE INGENIERÍA

Transcripción:

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA 1.- Calcular el Cuadrado TCP En esta aplicación el cliente se conecta al servidor, para ello debe introducir la dirección IP del servidor y los parámetros sobre los cuales el servidor debe hacer las operaciones. Una vez conectado con el servidor este toma los parámetros y calcula su cuadrado y lo imprime por pantalla. Posteriormente envía los resultados al cliente, el cual también los imprime por pantalla. En esta aplicación la conexión se realiza mediante conexión TCP, lo que permite al cliente y al servidor disponer de un stream que facilita una comunicación libre de errores. El comportamiento para usar este tipo de socket es diferente en el cliente y el servidor. Cada uno de ellos utilizará unos métodos distintos. El esquema básico pasa por suponer que el servidor adoptará un papel pasivo y procederá a esperar conexiones de los posibles clientes. Mientras que los clientes serán los encargados de solicitar conexiones a los servidores de forma activa. Código de ClienteTCP.java En primer lugar se determina la dirección IP del host a partir de un string representando su dirección IP. Creamos el socket, extraemos los flujos de entrada y salida, los escribimos y leemos el resultado final devuelto por el servidor, y lo imprimimos en pantalla. Finalmente cerramos los flujos y el socket. //ClienteTCP.java import java.io.*; import java.net.*; class ClienteTCP public static void main(string args[]) // Leemos el primer parámetro, donde debe ir la dirección // IP del servidor InetAddress direcc = null; direcc = InetAddress.getByName(args[0]); catch(unknownhostexception uhe) System.err.println("Host no encontrado : " + uhe); // Puerto que hemos usado para el servidor int puerto = 1234;

// Para cada uno de los argumentos... for (int n=1;n<args.length;n++) Socket sckt = null; DataInputStream dis = null; DataOutputStream dos = null; // Convertimos el texto en número int numero = Integer.parseInt(args[n]); // Creamos el Socket sckt = new Socket(direcc,puerto); // Extraemos los streams de entrada y salida dis = new DataInputStream(sckt.getInputStream()); dos = new DataOutputStream(sckt.getOutputStream()); // Lo escribimos dos.writeint(numero); // Leemos el resultado final long resultado = dis.readlong(); // Indicamos en pantalla System.out.println( "Solicitud = " + numero + "\tresultado = " +resultado ); // y cerramos los streams y el socket dis.close(); dos.close(); catch(exception e) System.err.println("Se ha producido la excepción : " +e); if (sckt!=null) sckt.close(); catch(ioexception ioe) System.err.println("Error al cerrar el socket : " + ioe); Código de ServidorTCP.java Primero se obtiene la dirección IP del servidor, abrimos un socket del servidor TCP en el puerto 1234, esperamos a que alguien se conecte a nuestro socket, una vez conectado el cliente extraemos los flujos de entrada y salida a través del puerto remoto y realizamos la operación del cuadrado y enviaremos el resultado al cliente. Luego se escribe ese resultado en la pantalla de servidor y se cierran los flujos.

//ServidorTCP.java import java.io.*; import java.net.*; class ServidorTCP public static void main(string args[]) // Primero indicamos la dirección IP local System.out.println("LocalHost = " + InetAddress.getLocalHost().toString()); catch (UnknownHostException uhe) System.err.println("No puedo saber la dirección IP local : " + uhe); // Abrimos un "Socket de Servidor" TCP en el puerto 1234. ServerSocket ss = null; ss = new ServerSocket(1234); catch (IOException ioe) System.err.println("Error al abrir el socket de servidor : " + ioe); int entrada; long salida; // Bucle infinito while(true) // Esperamos a que alguien se conecte a nuestro Socket Socket sckt = ss.accept(); // Extraemos los Streams de entrada y de salida DataInputStream dis = new DataInputStream(sckt.getInputStream()); DataOutputStream dos = new DataOutputStream(sckt.getOutputStream()); // Podemos extraer información del socket // Nº de puerto remoto int puerto = sckt.getport(); // Dirección de Internet remota InetAddress direcc = sckt.getinetaddress(); // Leemos datos de la peticion entrada = dis.readint(); // Calculamos resultado salida = (long)entrada*(long)entrada; // Escribimos el resultado dos.writelong(salida); // Cerramos los streams dis.close(); dos.close();

sckt.close(); // Registramos en salida estandard System.out.println( "Cliente = " + direcc + ":" + puerto + "\tentrada = " + entrada + "\tsalida = " + salida ); catch(exception e) System.err.println("Se ha producido la excepción : " +e); 2.- Calcular el Cuadrado UDP En esta aplicación el cliente envía un paquete al servidor, para ello debe introducir la dirección IP del servidor y los parámetros sobre los cuales el servidor debe hacer las operaciones. Una vez enviado el paquete al servidor este toma los parámetros y calcula su cuadrado y lo imprime por pantalla. Posteriormente el servidor envía un paquete con los resultados al cliente con la dirección IP y el puerto del cliente obtenidos anteriormente, el cual también los imprime por pantalla. En este caso se trata de un mecanismo más simple, puesto que el servicio sin conexión tan sólo nos ofrece un mero envío de datos. Puesto que no existe aquí la conexión no hay proceso previo alguno antes de enviar información. Para poder comunicar con otro proceso lo único que hay que hacer es crear el socket y utilizar sus métodos para el envío y recepción de información. Código de clienteudp.java En primer lugar se determina la dirección IP del host a partir de un string representando su dirección IP. Se construye un socket para datagramas y lo conecta al primer puerto disponible. Creamos un paquete con los datos y lo enviamos al servidor, preparemos un buffer para recibir los datos enviados por el servidor, creamos el contenedor del paquete y lo recibimos, creamos un stream de lectura a partir del buffer, leemos el resultado final y lo imprimimos en pantalla.

//clienteudp.java import java.net.*; import java.io.*; class clienteudp public static void main(string args[]) // Leemos el primer parámetro, donde debe ir la dirección // IP del servidor InetAddress direcc = null; direcc = InetAddress.getByName(args[0]); catch(unknownhostexception uhe) System.err.println("Host no encontrado : " + uhe); // Puerto que hemos usado para el servidor int puerto = 1234; // Creamos el Socket DatagramSocket ds = null; ds = new DatagramSocket(); catch(socketexception se) System.err.println("Error al abrir el socket : " + se); // Para cada uno de los argumentos... for (int n=1;n<args.length;n++) //creamos un buffer para escribir ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); // Convertimos el texto en número int numero = Integer.parseInt(args[n]); // Lo escribimos dos.writeint(numero); // y cerramos el buffer dos.close(); // Creamos paquete DatagramPacket dp = new DatagramPacket(baos.toByteArray(),4,direcc,puerto); // y lo mandamos ds.send(dp); // Preparamos buffer para recibir número de 8 bytes byte bufferentrada[] = new byte[8]; // Creamos el contenedor del paquete dp = new DatagramPacket(bufferEntrada,8);

// y lo recibimos ds.receive(dp); // Creamos un stream de lectura a partir del buffer ByteArrayInputStream bais = new ByteArrayInputStream(bufferEntrada); DataInputStream dis = new DataInputStream(bais); // Leemos el resultado final long resultado = dis.readlong(); // Indicamos en pantalla System.out.println( "Solicitud = " + numero + "\tresultado = " +resultado ); catch (Exception e) System.err.println("Se ha producido un error : " + e); Código de servidorudp.java Primero se obtiene la dirección IP del servidor, abrimos un socket UDP en el puerto 1234, a través de este socket enviaremos los datagramas, crearemos un contenedor de datagrama, cuyo buffer será un array, esperamos a recibir un paquete, extraemos la información del paquete recibido por parte de algún cliente, obtenemos el puerto y la dirección IP del cliente desde donde se envió el paquete, obtenemos el resultado y generamos un paquete con dicho resultado para enviárselo al cliente que solicitó la operación, para el envío del paquete se utiliza la dirección IP y el puerto obtenidos anteriormente del datagrama enviado por el cliente, posteriormente el servidor imprimirá el resultado por pantalla. //servidorudp.java import java.net.*; import java.io.*; class servidorudp public static void main(string args[]) // Primero indicamos la dirección IP local System.out.println("LocalHost = " + InetAddress.getLocalHost().toString()); catch (UnknownHostException uhe) System.err.println("No puedo saber la dirección IP local :" + uhe);

// Abrimos un Socket UDP en el puerto 1234. // A través de este Socket enviaremos datagramas del tipo DatagramPacket DatagramSocket ds = null; ds = new DatagramSocket(1234); catch(socketexception se) System.err.println("Se ha producido un error al abrir el socket : " + se); // Bucle infinito while(true) // Nos preparamos a recibir un número entero (32 bits = 4 bytes) byte bufferentrada[] = new byte[4]; // Creamos un "contenedor" de datagrama, cuyo buffer // será el array creado antes DatagramPacket dp = new DatagramPacket(bufferEntrada,4); // Esperamos a recibir un paquete ds.receive(dp); // Podemos extraer información del paquete // Nº de puerto desde donde se envió int puerto = dp.getport(); // Dirección de Internet desde donde se envió InetAddress direcc = dp.getaddress(); // "Envolvemos" el buffer con un ByteArrayInputStream... ByteArrayInputStream bais = new ByteArrayInputStream(bufferEntrada); //... que volvemos a "envolver" con un DataInputStream DataInputStream dis = new DataInputStream(bais); // Y leemos un número entero a partir del array de bytes int entrada = dis.readint(); long salida = (long)entrada*(long)entrada; // Creamos un ByteArrayOutputStream sobre el que podamos escribir ByteArrayOutputStream baos = new ByteArrayOutputStream(); // Lo envolvemos con un DataOutputStream DataOutputStream dos = new DataOutputStream(baos); // Escribimos el resultado, que debe ocupar 8 bytes dos.writelong(salida); // Cerramos el buffer de escritura dos.close(); // Generamos el paquete de vuelta, usando los datos // del remitente del paquete original

dp = new DatagramPacket(baos.toByteArray(),8,direcc,puerto); // Enviamos ds.send(dp); // Registramos en salida estandard System.out.println( "Cliente = " + direcc + ":" + puerto + "\tentrada = " + entrada + "\tsalida = " + salida ); catch(exception e) System.err.println("Se ha producido el error " + e);