1 / 38

Tema 16: Comunicaciones en Red

Tema 16: Comunicaciones en Red. Índice. Introducción. Socket. URL. Datagramas. Introducción. Se puede realizar con cualquier lenguaje java.net Las clases encapsulan el paradigma de “socket” (conectores) creados por BSD (Berkeley Software Distribution) en la Universidad de Berkeley.

schuyler
Télécharger la présentation

Tema 16: Comunicaciones en Red

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tema 16: Comunicaciones en Red

  2. Índice • Introducción. • Socket. • URL. • Datagramas.

  3. Introducción • Se puede realizar con cualquier lenguaje • java.net • Las clases encapsulan el paradigma de “socket” (conectores) creados por BSD (Berkeley Software Distribution) en la Universidad de Berkeley. • UNIX 4.2BSD (Bill Joy, en Sun Microsystems). • Los programas Java están en la capa de aplicación. • Pasos: Abrir, leer/escribir, cerrar.

  4. TCP (Transport Control Protocol) • Comunicaciones fiables, establecen una conexión y comunicaciones en ambos sentidos. • El orden en que se envían y reciben los datos es crítico. • Servicio telefónico. • Ejemplos: • HTTP (Hypertext Transfer Protocol) • FTP (File Transfer Protocol) • Telnet • Clases: URL, URLConnection, Socket y ServerSocket.

  5. UDP (User Datagram Protocol) • No está orientado a conexión. No se garantiza la entrega. • Servicio postal. • Los paquetes de datos: datagramas. • Clases: DatagramPacket, DatagramSocket y MulticastSocket.

  6. Puertos • Distingue la aplicación dentro de la máquina. • Los datos van acompañados de • la dirección de la computadora (32 bits) • el puerto al que va destinado (16 bits) • Rango para los puertos: 0-65535

  7. Servidor Puerto Cliente

  8. Aplic. Aplic. Aplic. Aplic. puerto puerto puerto puerto TCP o UDP Datos #puerto Datos

  9. Conectores reservados • TCP/IP reserva los primeros 1024 para sus protocolos específicos. Puerto Servicio 13/udp daytime 21/tcp ftp 23 /tcp telnet 25 /tcp E-mail 79 /tcp finger 80 /tcp HTTP 119 /tcp netnews

  10. Servicio de nombres de Dominio (DNS) • Existe una jerarquía de nombres asociada a los números que representan las direcciones que se conoce como DNS. • Permite teclear www.yahoo.com en vez de 205.216.146.71.

  11. Aplicación (HTTP, ftp, telnet, ...) Transporte (TCP, UDP, ...) Red (IP, ...) Enlace (dispositivo driver, ...)

  12. El paquete java.net (I) Clase abstracta. SocketImpl Implementa un cliente Socket. Socket Implementa un servidor Socket. ServerSocket Acceso a la red vía socket SocketPermission

  13. El paquete java.net (II) Puntero a un recurso en la world wide web URL Clase abstracta. Superclase para comunic. entre aplic y URL. URLConnection Carga clases y recursos URLClassLoader Convierte el formato MIME en String URLDecoder Convierte el formato String en MIME URLEncoder Clase abstracta. URLStreamHandler Un URLConnection con soporte para características http. HttpURLConnection Uso de archivos JAR JarURLConnection Clase abstracta. ContentHandler

  14. El paquete java.net (III) Clase que representa un datagrama. DatagramPacket Tx/Rx de datagramas en un socket. DatagramSocket Tx/Rx de paquetes IP multicast. MulticastSocket

  15. El paquete java.net (y IV) Respresenta una dirección de IP. InetAddress Autentificación para una conexión a la red. Authenticator Clase para permisos en la red. NetPermission Para autentificación PasswordAuthentication

  16. InetAddress • Encapsula direcciones IP y sus nombres. • No tiene constructores visibles, pero se proporcionan métodos estáticos. • static InetAddress getLocalHost() • Devuelve el objeto que representa al nodo local. • static InetAddress getByName(String nomNodo) • Devuelve el nombre del nodo que se le pasa. • Puede lanzar UnknownHostException (excepción de nodo desconocido). • static InetAddress[] getAllByName(String nomNod) • devuelve una matriz que representa todas las direcciones en las que se traduce un nombre dado. • Puede lanzar UnknownHostException.

  17. import java.net.InetAddress; class dire{ public static void main(String args[]) { InetAddress direccion; try{ direccion = InetAddress.getLocalHost(); System.out.println(direccion); System.out.println(); direccion = InetAddress.getByName("trajano.us.es"); System.out.println(direccion); System.out.println(); InetAddress SW[] = InetAddress.getAllByName("trajano.us.es"); for(int i = 0; i<SW.length; i++) System.out.println(SW[i]); }catch (Exception e){ System.out.println("Error en ejecución: "+e); } } } /* [16]-adriano:Mon> java dire adriano/193.147.162.138 trajano.us.es/193.147.162.130 trajano.us.es/193.147.162.130 [17]-adriano:Mon> */

  18. Métodos no estáticos • String getHostName() • Devuelve como cadena el nombre del nodo. • byte[] getAddress() • Devuelve una matriz de bytes de cuatro elementos que representa la dirección en Internet del objeto en el "orden de bytes de la red". • String toString() • Devuelve el nombre del nodo y la dirección IP. Ejemplo, "starwave.com/192.147.170.6". • boolean equals(InetAddressotroNodo) • Devuelve true si los objeto tiene la misma dirección.

  19. Socket • Socket: Comunic. de bajo nivel. • URL y URLConnection: Comunic. de alto nivel. • Sobre TCP, cada programa establece una conexión (cliente-servidor) y va ligado a un socket. • Los socket son puntos finales del enlace. • Los procesos los trata como descriptores de ficheros. • El Cliente conoce: • el nombre la máquina servidora • número de puerto al que está conectado • El Servidor: • Acepta la conexión

  20. Modelo de Comunicaciones Servidor Cliente ServerSocket(#port) accept() Socket(host,#port) OutputStream InputStream OutputStream InputStream close() close()

  21. Constructores para el cliente • Cuando se crea un objeto Socket, se establece una conexión entre cliente y servidor. • Socket(String nodo, int puerto) • Crea un conector que conecta el nodo local con el nodo y puerto especificados. • Socket(InetAddressdirección, int puerto) • Crea un conector utilizando un objeto InetAddress ya existente y un puerto. • En total son 8 constructores (versión 1.2). • Puede lanzar UnknownHostException o IOException.

  22. Información del Socket y flujos • InetAddressgetInetAddress() • Devuelve la InetAddress asociada con el objeto Socket. • intgetPort() • Devuelve el puerto remoto al que está conectado este objeto Socket. • int getLocalPort() • Devuelve el puerto local al que está conectado este objeto Socket. • InputStream getInputStream() • Devuelve el InputStream (flujo de entrada) asociado con este conector. • OutputStream getOutputStream() • Devuelve el OutputStream (flujo de salida) asociado con este conector. • void close() • Cierra el InputStream y el OutputStream.

  23. Constructores para el Servidor • ServerSocket(int puerto) • Crea un conector en el servidor en un puerto específico. • ServerSocket(int puerto, int backlog) • Se configura la longitud máx. de la cola de entrada. • ServerSocket(int port, int backlog, InetAddressdir) • Ligada a una dirección.

  24. Creación de flujos de Entrada • En el cliente se crea un flujo de entrada para recibir las respuestas del servidor (DataInputStream) Socket sock = new Socket(“host”,puerto); DataInputStream in = new DataInputStream(sock.getInputStream()); • DataInputStream tiene métodos como read(), readLine(), readChar(), readInt(), … • En el servidor también, para recibir a los clientes ServerSocket sock = new ServerSocket(puerto);

  25. Creación de flujos de Salida • En el cliente se crea un flujo de salida para enviar información al servidor (DataOutputStream o PrintStream) PrintStream out = new PrintStream(sock.getOutputStream()); DataOutputStream out = new DataInputStream(sock.getOutputStream()); • PrintStream tiene los métodos write y println. • DataOutputStream escribe los datos primarios y writeBytes. • En el servidor se envía información al cliente PrintStream out = new PrintStream(sock.getOutputStream());

  26. import java.net.*; import java.io.*; class Whois{ public static void main(String args[]) throws Exception{ int c; Socket s = new Socket("intermic.net",43); InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream(); String str = (args.length==0 ? ”starwave.com”: args[0]+"\n”); byte buf[] = new byte[str.length()]; str.getBytes(0,str.length(), buf, 0 ); out.write(buf); while((c = in.read()) != -1) { System.out.println((char)c); } s.close(); in.close(); out.close(); } }

  27. import java.io.*; • import java.net.*; • public class EchoClient { • public static void main(String[] args) throws IOException { • Socket echoSocket = null; • PrintWriter out = null; • BufferedReader in = null; • try { • echoSocket = new Socket("adriano", 7);//crea un socket • // dos siguientes lineas son para leer/escribir en socket • out = new PrintWriter(echoSocket.getOutputStream(), true); • in = new BufferedReader(new • InputStreamReader(echoSocket.getInputStream())); • } catch (UnknownHostException e) { • System.err.println("No conoce el host: adriano."); • } catch (IOException e) { • System.err.println("Error E/S en la conexion: adriano."); • } Continúa ...

  28. Continuación … • if(echoSocket!=null&& in!=null && out!=null){ • BufferedReader stdIn = new BufferedReader(new • InputStreamReader(System.in)); • String userInput; • while ((userInput = stdIn.readLine()) != null) { • out.println(userInput); • System.out.println("echo: " + in.readLine()); • } • out.close(); • in.close(); • stdIn.close(); • echoSocket.close(); • } • } • }

  29. URL (Uniform Resource Locator) • Referencia (dirección) de un recurso de Internet. • Protocolos: HTTP, FTP, Gopher, File y News. • Nombre del recurso: http://java.sun.com Nombre del recurso Identificador de protocolo Nombre de la máquina en la que está el recurso. Nombre host Nombre del camino al fichero en la máquina. Nombre fichero Puerto al que se conecta (opcional). Número de Puerto Referencia al nombre (opcional). Referencia

  30. Constructores (I) • URL absoluto, contiene toda la información para alcanzar el recurso • URL(Stringcad), ejemplo URL gamelan = new URL("http://www.gamelan.com/"); • URL relativo, los ficheros HTML dan de forma relacionada con el fichero en el que están. • URL(URL base ,Stringrelativo), ejemplo URL game = new URL("http://www.gamelan.com/pages/"); URL gamelan = new URL(game,”Gamelan.html");

  31. Constructores (y II) • URL(String proto, String host, int port, String file) • URL(String proto, String host, String file) • URL gam = new URL ("http", ”www.gamelan.com”, 80, "/pages/Gamelan. html"); • Crea un objeto URL para el siguiente URL: http://www.gamelan.com:80/pages/Gamelan.network.html • MalformedURLException • Si el protocolo es desconocido o los argumentos del constructor son incorrectos. • Los objetos URL se escriben una vez (no se pueden cambiar).

  32. Métodos • String getProtocol() • Devuelve el componente identificador de protocolo del URL • String getHost() • Devuelve el nombre de host del URL • int getPort() • Devuelve el número de puerto del componente URL. Devuelve un entero que es el número de puerto. Si el puerto no es asignado explicitamente devuelve -1. • String getFile() • Devuelve el nombre del fichero del componente del URL. • String toExternalForm() • Devuelve una cadena que representa un URL.

  33. Ejemplo import java.net.*; class Patric{ public static void main(String args[]) throws MalformedURLException{ URL hp = new URL ("http://www.starwave.com/people/naughton/"); System.out.println("Protocolo: "+ hp.getProtocol()); System.out.println("Puerto: "+ hp.getPort()); System.out.println("Nodo: "+ hp.getHost()); System.out.println("Archivo: "+ hp.getFile()); System.out.println("Ext: "+ hp.toExternalForm()); } } /* Protocolo: http Puerto: -1 Nodo: www.starwave.com Archivo: /people/naughton/ Ext: http://www.starwave.com/people/naughton/ */

  34. Conexión a un URL • URLConnection openConnection() import java.net.*; import java.io.*; class URL0{ public static void main(String args[]) { try{ URL yahoo = new URL ("http://www.yahoo.com/"); yahoo.openConnection(); System.out.println("OK "); }catch(MalformedURLException e){ System.out.println("Excep: " + e); }catch(IOException e){ System.out.println("Excep: " + e); } } }

  35. Leyendo de un URL • InputStream openStream() import java.net.*; import java.io.*; class URL1{ public static void main(String args[]) throws Exception{ URL yahoo = new URL ("http://www.yahoo.com/"); BufferedReader in = new BufferedReader( new InputStreamReader(yahoo.openStream())); String inputLine; while((inputLine = in.readLine())!= null) System.out.println(inputLine); in.close(); } }

  36. Leyendo de un URLConnection • InputStream getInputStream() import java.net.*; import java.io.*; class URL2{ public static void main(String args[]) throws Exception{ URL yahoo = new URL ("http://www.yahoo.com/"); URLConnection yc = yahoo.openConnection(); BufferedReader in = new BufferedReader( new InputStreamReader(yc.getInputStream())); String inputLine; while((inputLine = in.readLine())!= null) System.out.println(inputLine); in.close(); } }

  37. Datagramas • Los Datagramas se implementan sobre el protocolo UDP, con dos clases: • DatagramPacket, contiene los datos • DatagramSocket, es el mecanismo para enviar o recibir los DatagramPacket.

  38. Métodos • InetAddress getAddress() • Devuelve la dir. de destino (para envíos) • int getPort() • Devuelve el número de puerto. • byte[] getData() • Devuelve el contenido del datagrama • int getLength() • Devuelve la longitud de los datos válidos

More Related