Universidad de Cantabria corcuerp@unican.es



Documentos relacionados
Federico Peinado

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

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

Arquitecturas cliente/servidor

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

Lab 01: Programación de Sockets en TCP

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

Red LSUB. 4 de marzo de 2015 GSYC

Desarrollo de Aplicaciones Distribuidas. Sockets. Daniel Avellaneda

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

PROGRAMACIÓN CLIENTE-SERVIDOR MEDIANTE SOCKETS EN JAVA

Cliente/Servidor en Java

UNIVERSIDAD POLITÉCNICA DE PACHUCA SOCKETS EN JAVA

EJEMPLOS PROGRAMACIÓN SOCKET - JAVA

Arquitecturas cliente/servidor

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

Las clases Java Socket y ServerSocket

Java: comunicación en Internet. Modem. Satelite UMTS W-LAN. Láser. Fibra óptica. Conceptos básicos

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

Justamente, una de las formas de crear un objeto de la clase URL permite especificar también el puerto:

Introduciendo datos desde el

Sockets. Sockets. 1 Introducción

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

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

PROGRAMACION DISTRIBUIDA

PROGRAMACION DISTRIBUIDA

Aplicaciones Cliente-Servidor Con Datagramas

Capítulo 5. Programación de aplicaciones de red

Programación para redes con Java

Práctica 5: Servidor web concurrente en Java

INGENIERÍA DE PROTOCOLOS DE COMUNICACIONES (MÓDULO 2)

Comunicacion en Java. Alejandro Escobar

Modelo de Objetos Distribuidos

Examen de Redes - ETSIA 9 de septiembre - Primer Parcial

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

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

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

Direcciones IP y puertos

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

Tema 3: COMUNICACIÓN ENTRE PROCESOS

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

Programación Orientada a Objetos. Tema 7: Persistencia

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

Laboratorio de Redes de Comunicaciones Programación con Sockets en Java

RMI [Remote Method Invocation]

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

PROGRAMACIÓN CONCURRENTE Y DISTRIBUIDA. VI.1: Socket Java

Sistemas Distribuidos (Capítulo 8 de Distributed Computing de M. L. Liu)

Sockets UDP. Arquitecturas Cliente/Servidor, Sem M.I.Yasmine Macedo Reza

MANUAL TÉCNICO DEL PROXY UTN

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

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

Clases Java para comunicaciones en red

COMUNICACIÓN ENTRE PROCESOS SOCKETS

ARQUITECTURAS CLIENTE/SERVIDOR

Práctica sobre compartición de instancias remotas.

Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco.

TELEPROCESO Y SISTEMAS DISTRIBUIDOS

Tutorial BMS Server Studio UDP

Arquitecturas cliente/servidor

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

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

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Práctica III: Streams, Readers y Writers

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

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

Tema 4.1: - TRANSPORTE-

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Arquitectura Cliente/Servidor. Invocación de Métodos Remotos RMI: Remote Method Invocation. Llamadas a Métodos Remotos

CAPITULO 5. SOCKETS. M.E Carmen Cerón G Programación Concurrente 109

1. Definición de puerto 2. Sockets 3. Conceptos cliente/servidor 4. Definición de Stream 5. Concurrencia, multiprogramación y multitarea 6.

Diseño y Evaluación de Configuraciones. Componentes software para cargar el sistema

Posibles implementaciones

Práctica 7: Invocación Web Services con REST

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Manual del Protocolo XML-RPC de Mensajería Negocios

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

Problemas de Redes de Computadores. Conjunto de problemas 1

1. Visión general de RMI

Tema 4 El paradigma cliente-servidor

Práctica 5: Common Object Request Broker Architecture CORBA

Sistemas Distribuidos Java RMI (Remote Method Invocation) Alberto Lafuente Mikel Larrea Dpto. ATC, UPV/EHU

Cátedra de Sistemas Distribuidos Escuela de Ingeniería Electrónica Departamento de Sistemas e Informática

Juan de Dios Murillo Morera Santiago Caamaño Polini INTRODUCCIÓN

Introducción de Sockets en C.

Sockets (TCP) Tema 2.- Nivel de aplicación en Internet

Examen de Introducción a las Redes de Computadoras y Comunicación de Datos (ref: sirc0707.doc) 31 de julio de 2007

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Remote Method Invocation (RMI) de Java

Multienhebrado en Java Un toque de sincronización Transporte en Java Ejemplo conjunto

Comunicación entre procesos

James Gosling, creador de Java

Introducción a Java LSUB. 15 de enero de 2015 GSYC

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

public static void main(string[ ] args) { Numero f1 = new Numero(3); Numero f2 = new Numero(4); Numero f3 = f1; f1.value = f2.value; Numero f4 = null;

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

TEMA 5. Otras arquitecturas distribuidas II. Objetos distribuidos y CORBA

Transcripción:

Networking Pedro Corcuera Dpto. Matemática Aplicada y Ciencias de la Computación Universidad de Cantabria corcuerp@unican.es

Objetivos Aprender los conceptos básicos de redes y su implementación en Java Desarrollar programas de comunicación Java 2

Índice Conceptos de redes Basic Concepts on Networking Dirección IP Protocolo Puertos Paradigma Cliente/Servidor Sockets Paquete Java Networking La clase ServerSocket y Socket La clase MulticastSocket y DatagramPacket Java 3

Concepto básico de redes dirección IP Similar, desde el punto de vista lógico, al tradicional correo tradicional Cada dirección identifica de manera única un objeto particular Cada computador conectado a Internet tiene una dirección IP (Internet Protocol) Se usa un número de 32 bits para identificar de manera única cada computador conectado a Internet 193.144.189.63 macc.unican.es Java 4

Protocolo Los protocolos son necesarios porque hay diferentes tipos de comunicación sobre Internet Cada tipo de comunicación requiere un protocolo específico y único Un protocolo se puede definir como el conjunto de reglas y estándares que definen un cierto tipo de comunicación Internet El protocolo describe el formato de dato enviado a Internet (cómo y cuando es enviado) Los protocolos los usamos habitualmente (protocolo social) Java 5

Protocolo Algunos protocolos importantes usados en Internet son: File Transfer Protocol (FTP), que permite transferir ficheros sobre Internet Hypertext Transfer Protocol (HTTP), usada para transferir doumentos HTML sobre la Web Ambos protocolos tienen su propio conjunto de reglas y estándares en la forma en que los datos se transfieren Java proporciona el soporte para ambos protocolos Java 6

Puertos Los protocolos tienen sentido cuando se usan en el contexto de un servicio El protocolo HTTP es usado cuando se proporciona contenido Web a través del servicio HTTP Cada computador en Internet puede proporcionar una variedad de servicios Para establecer una línea de comunicación a través de un protocolo y usar un servicio particular específico requiere la conexión al puerto apropiado Java 7

Puertos Un puerto es un número de 16 bits que identifica cada servicio ofrecido por el servidor de red Puertos estándar Números asociados a un tipo de servicio particular. Ejemplos: el puerto del servicio FTP es 21, el puerto del servicio HTTP es 80, el puerto del servicio TELNET es 23 Los valores de puerto son < 1024 Valores de puertos >= 1024 Disponibles para una comunicación personalizada Si ya está en uso, debe buscarse otros valores no usados Java 8

El paradigma cliente/servidor Básico en la plataforma de red Java Involucra dos elementos principales: Cliente, máquina que necesita de algún tipo de información Servidor, máquina que almacena información y que espera por responder a una petición Escenario: El cliente se conecta al servidor y solicita cierta información El servidor recibe la petición y responde al cliente con la información Java 9

Sockets - definiciones Abstracción software para un medio de comunicación de entrada o salida Canales de comunicación que permiten transferir datos a través de un puerto en particular Punto de comunicación o de conexión lógica entre dos máquinas Tipo particular de comunicación en red usada por Java en la programación de redes Java realiza toda la comunicación de bajo nivel a través de sockets Java 10

Hay dos tipos de sockets: Servidores Clientes Sockets - tipos Un socket servidor espera las solicitudes de conexión de clientes. Un socket cliente se puede usar para enviar y recibir datos. Java 11

Package de Networking Java Java proporciona el paquete java.net que proporciona clases útiles para el desarrollo de aplicaciones de red Algunas clases en el package son: ServerSocket Socket MulticastSocket DatagramSocket Java 12

La clase ServerSocket Proporciona la funcionalidad básica de un servidor Escuchan un puerto específico, consistente en un número único El número del puerto es necesario para distinguir diferentes servidores ejecutándose en una misma máquina Deben ejecutarse antes que los clientes inicien la comunicación Java 13

La clase ServerSocket Resumen de Constructores ServerSocket() Creates an unbound server socket. ServerSocket(int port) Creates a server socket, bound to the specified port. ServerSocket(int port, int backlog) Creates a server socket and binds it to the specified local port number, with the specified backlog. ServerSocket(int port, int backlog, InetAddress bindaddr) Create a server with the specified port, listen backlog, and local IP address to bind to. Java 14

La clase ServerSocket - creación En su forma más simple se crean instanciando la clase ServerSocket mediante cualquiera de los siguientes constructores: ServerSocket(int port) ServerSocket(int port, int backlog) port es el número de puerto que atiende el socket. Cuando varios clientes contactan con el servidor al mismo tiempo, se colocan en una cola y se atienden en el orden de recepción. Java 15

La clase ServerSocket - métodos Métodos usados comúnmente: accept() Espera por una conexión. El thread que ejecuta el método se bloqueará hasta que se recibe una solicitud, devolviendo un socket cliente. close() para recibir solicitudes de clientes. La comunicación con sockets se gestiona con input / output streams. Java 16

Ejemplo de ServerSocket import java.net.*; import java.io.*; public class NetworkingServer { public static void main(string [] args) { ServerSocket server = null; Socket client; // Numero de puerto a usar por defecto int portnumber = 1234; if (args.length >= 1){ portnumber = Integer.parseInt(args[0]); // Crea socket lado Server try { server = new ServerSocket(portnumber); catch (IOException ie) { System.out.println("No puede abrir socket." + ie); System.exit(1); System.out.println("ServerSocket creado" + server); Java 17

Ejemplo de ServerSocket while(true) {// Espera datos del cliente y responde try { // Escucha por una conexión al socket y lo acepta. System.out.println("Esperando solicitud de conexion..."); client = server.accept(); System.out.println("Conexion aceptada..."); String clienthost = client.getinetaddress().gethostaddress(); int clientport = client.getport(); System.out.println("Cliente = " + clienthost + " Puerto Cliente = " + clientport); // Lee datos del cliente InputStream clientin = client.getinputstream(); BufferedReader br = new BufferedReader(new InputStreamReader(clientIn)); String msgfromclient = br.readline(); System.out.println("Mensaje recibido del cliente = " + msgfromclient); Java 18

Ejemplo de ServerSocket // Envia respuesta al cliente if (msgfromclient!= null &&!msgfromclient.equalsignorecase("adios")) { OutputStream clientout = client.getoutputstream(); PrintWriter pw = new PrintWriter(clientOut, true); String ansmsg = "Hola, " + msgfromclient; pw.println(ansmsg); // Cierra sockets if (msgfromclient!= null && msgfromclient.equalsignorecase("adios")) { server.close(); client.close(); break; catch (IOException ie) { Java 19

Ejemplo de ServerSocket // Envia respuesta al cliente if (msgfromclient!= null &&!msgfromclient.equalsignorecase("adios")) { OutputStream clientout = client.getoutputstream(); PrintWriter pw = new PrintWriter(clientOut, true); String ansmsg = "Hola, " + msgfromclient; pw.println(ansmsg); // Cierra sockets if (msgfromclient!= null && msgfromclient.equalsignorecase("adios")) { server.close(); client.close(); break; catch (IOException ie) { Java 20

La clase Socket (Cliente) Implementa un cliente socket. Se consigue de dos formas: lado cliente: Socket(String host, int port) lado servidor: método accept() de ServerSocket Cada cliente socket tiene un objeto InputStream para recibir datos y un objeto OutputStream para enviar datos. Métodos usados: getinputstream() Devuelve un objeto InputStream getoutputstream() Devuelve un objeto OutputStream close() Cerrar la conexión Java 21

La clase Socket (Cliente) Resumen de Constructores Socket() Creates an unconnected socket, with the system-default type of SocketImpl. Socket(InetAddress address, int port) Creates a stream socket and connects it to the specified port number at the specified IP address. Socket(InetAddress address, int port, InetAddress localaddr, int localport) Creates a socket and connects it to the specified remote address on the specified remote port. Socket(Proxy proxy) Creates an unconnected socket, specifying the type of proxy, if any, that should be used regardless of any other settings. protected Socket(SocketImpl impl) Creates an unconnected Socket with a user-specified SocketImpl. Socket(String host, int port) Creates a stream socket and connects it to the specified port number on the named host. Socket(String host, int port, InetAddress localaddr, int localport) Creates a socket and connects it to the specified remote host on the specified remote port. Java 22

Ejemplo de cliente Socket import java.io.*; import java.net.*; public class NetworkingClient { public static void main(string args[]) { Socket client = null; String host; // Host y Puerto a considerar por defecto int portnumber; if (args.length >= 1){ host = args[0]; portnumber = Integer.parseInt(args[1]); else { host = "localhost"; portnumber = 1234; for (int i=0; i <10; i++) { try { String msg = ""; // Creacion cliente socket client = new Socket(host, portnumber); System.out.println("Cliente socket creado " + client); // Creacion de un output stream del cliente socket OutputStream clientout = client.getoutputstream(); PrintWriter pw = new PrintWriter(clientOut, true); Java 23

Ejemplo de cliente Socket // Creacion de un input stream del cliente socket InputStream clientin = client.getinputstream(); BufferedReader br = new BufferedReader(new InputStreamReader(clientIn)); // Creacion de BufferedReader para el standard input BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Escribir nombre. Para salir adios); // Lee datos del standard input y lo escribe // en el output stream del cliente socket. msg = stdin.readline().trim(); pw.println(msg); // Lee datos del input stream del cliente socket. System.out.println("Mensaje recibido del seridor = " + br.readline()); pw.close(); br.close(); client.close(); // cierra Streams if (msg.equalsignorecase("adios")) {// Para la operacion break; catch (IOException ie) { System.out.println("Error I/O " + ie); Java 24

La clase DatagramPacket Usada para entregar datos con protocolo sin conexión El problema es que no está garantizado la entrega de paquetes Resumen de Constructores DatagramPacket(byte[] buf, int length) Constructs a DatagramPacket for receiving packets of length length. DatagramPacket(byte[] buf, int length, InetAddress address, int port) Constructs a datagram packet for sending packets of length length to the specified port number on the specified host. DatagramPacket(byte[] buf, int offset, int length) Constructs a DatagramPacket for receiving packets of length length, specifying an offset into the buffer. DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) Constructs a datagram packet for sending packets of length length with offset ioffsetto the specified port number on the specified host. DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) Constructs a datagram packet for sending packets of length length with offset ioffsetto the specified port number on the specified host. DatagramPacket(byte[] buf, int length, SocketAddress address) Constructs a datagram packet for sending packets of length length to the specified port number on the specified host. Java 25

La clase MulticastSocket Util para aplicaciones que implementan comunicaciones en grupo sobre datagramas UDP La dirección IP para un grupo multicast se encuentra en el rango 224.0.0.0 (no usar!) a 239.255.255.255 Resumen de Constructores MulticastSocket() Create a multicast socket. MulticastSocket(int port) Create a multicast socket and bind it to a specific port. MulticastSocket(SocketAddress bindaddr) Create a MulticastSocket bound to the specified socket address. Java 26

La clase MulticastSocket Envío de mensaje a un grupo Debe ser un miembro del grupo multicast mediante el uso del método joingroup Usar el método send Usar el método leavegroup El método send requiere como argumento un objeto DatagramPacket Java 27

Ejemplo de Server MulticastSocket import java.net.*; public class MulticastChatServer { public static void main(string args[]) throws Exception { // Numero de puerto a usar por defecto int portnumber = 5000; if (args.length >= 1) { portnumber = Integer.parseInt(args[0]); // Creacion de MulticastSocket MulticastSocket servermulticastsocket = new MulticastSocket(portnumber); System.out.println("MulticastSocket creado e puerto " + portnumber); // Determina la direccion IP delhost, dado el host name InetAddress group = InetAddress.getByName("225.4.5.6"); // getbyname- returna direccion IP de un host dado servermulticastsocket.joingroup(group); System.out.println("metodo joingroup invocado..."); Java 28

Ejemplo de Server MulticastSocket boolean infinite = true; // Continuamente recibe datos y los imprime while (infinite) { byte buf[] = new byte[1024]; DatagramPacket data = new DatagramPacket(buf, buf.length); servermulticastsocket.receive(data); String msg = new String(data.getData()).trim(); System.out.println("Mensaje recibido por el cliente = " + msg); servermulticastsocket.close(); Java 29

Ejemplo de Cliente MulticastSocket import java.net.*; import java.io.*; public class MulticastChatClient { public static void main(string args[]) throws Exception { // Numero de puerto a usar por defecto int portnumber = 5000; if (args.length >= 1) { portnumber = Integer.parseInt(args[0]); // Creacion de un MulticastSocket MulticastSocket chatmulticastsocket = new MulticastSocket(portnumber); // Determina la direccion IP de un host, dado el host name InetAddress group = InetAddress.getByName("225.4.5.6"); // Se une al multicast group chatmulticastsocket.joingroup(group); Java 30

Ejemplo de Cliente MulticastSocket // Pide al usuario ingresar un mensaje String msg = ""; System.out.println("Escribir mensaje al servidor: "); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); msg = br.readline(); // Envio del mensaje a la direccion Multicast DatagramPacket data = new DatagramPacket(msg.getBytes(), 0, msg.length(), group, portnumber); chatmulticastsocket.send(data); // Cierre del socket chatmulticastsocket.close(); Java 31

Computación distribuída Mecanismos de Java para soportar la computación distribuída: Comunicación basada en socket RMI (remote method invocation) Mecanismos de interfaz entre aplicaciones Java y no- Java: JDBC (Java DataBase Connectivity) CORBA (Common Object Request Broker Architecture). Java 32