Download Universidad Tecnológica Equinoccial Facultad de Ciencias e
Document related concepts
no text concepts found
Transcript
Universidad Tecnológica Equinoccial Facultad de Ciencias e Ingeniería Técnicas Avanzadas de Programación Segundo Semestre 2011-12 Diego Ordóñez Camacho, Ph.D. Programación en red Sockets cliente http://download.oracle.com/javase/7/docs/api/java/net/Socket.html Java.net.Socket Socket s = new Socket("servidor", puerto); s.getInputStream(); s.getOutputStream(); s.close(); ...Programación en red Leer de un socket java.io.InputStream is = s.getInputStream(); http://download.oracle.com/javase/7/docs/api/java/io/InputStream.html java.util.Scanner scan = new Scanner(is); http://download.oracle.com/javase/7/docs/api/java/util/Scanner.html scan.hasNextLine(); scan.nextLine(); Ejercicios Programe un cliente con sockets que se conecte al servidor red.Server1 e imprima el mensaje enviado por dicho servidor Ejecutar servidor java -cp ./U1red.jar red.Server1 java -cp ./U1red.jar red.Server1 8888 Ejecutar cliente de referencia java -cp ./U1red.jar red.Client1 java -cp ./U1red.jar red.Client1 localhost 8888 ...Programación en red Escribir en un socket java.io.OutputStream os = s.getOutputStream(); java.io.PrintWriter pw = new PrintWriter(os, true); http://download.oracle.com/javase/7/docs/api/java/io/OutputStream.html http://download.oracle.com/javase/7/docs/api/java/io/PrintWriter.html pw.println("mensaje"); Recibir datos del usuario (teclado) Scanner kb = new Scanner(System.in); String line = kb.nextLine(); ...Ejercicios Programe un cliente con sockets que se conecte al servidor red.ServerEcho y se comunique con el mismo hasta recibir un mensaje "Close:" Ejecutar servidor java -cp ./U1red.jar red.ServerEcho [8888] Ejecutar cliente de referencia java -cp ./U1red.jar red.ClientEcho [localhost 8888] Programación en red Sockets servidor http://download.oracle.com/javase/7/docs/api/java/net/Socket.html Java.net.ServerSocket http://download.oracle.com/javase/7/docs/api/java/net/ServerSocket.html ServerSocket serverSocket = new ServerSocket(puerto); Socket connectionSocket = serverSocket.accept(); Prácticamente toda la programación se hace sobre el connectionSocket, tal como en el cliente Ejercicios Programe el servidor del primer ejercicio red.Server1 Acepta conexiones de los clientes Al recibir una conexión envía al cliente el mensaje "Hola desde el Server !!!" Y cierrra la conexión Permanece en espera de una nueva conexión indefinidamente Ejercicios Programe el servidor del segundo ejercicio red.ServerEcho Acepta conexiones de los clientes Al recibir una conexión envía al cliente un mensaje de confirmación Queda en espera demensajes del cliente Por cada mensaje recibido del cliente le devuelve el mismo mensaje precedido de la palabra "Echo: " Al recibir el mensaje: "EXIT" cierra la conexión con el cliente Permanece en espera de una nueva conexión indefinidamente URL: Uniform Resource Locator Direcciones físicas de objetos que pueden ser recuperados a través de alguno de los protocolos de red existentes Sintaxis Prefijo: « URL: » Casi nunca se utiliza Esquema: protocolo (http, ftp, mailto, …) « : » « // » Servidor: « www.server.com » Puerto: « :80 » Path: « /recurso/recurso/… » Cliente Usando URLs java.net.URL http://download.oracle.com/javase/7/docs/api/java/net/URL.html URL dir = new URL("http://es.wikipedia.org/"); Java.net.URLConnection http://download.oracle.com/javase/7/docs/api/java/net/URLConnection.html URLConnection conn = dir.openConnection(); conn.getDate(); conn.getContentType(); conn.getContentLength(); conn.getInputStream();//para recibir el archivo ... Ejercicio Cree un cliente que, usando URL, se conecte con "http://es.wikipedia.org/" El cliente deberá recuperar y presentar al usuario la siguiente información Fecha Tipo de contenido Talla del contenido El contenido Ejecutar cliente de referencia java -cp ./U1red.jar red.ClientURL [http://es.wikipedia.org/] http: HyperText Transfer Protocol Es un protocolo de aplicación de tipo petición/respuesta, sin estado, para el intercambio de mensajes entre cliente y servidor Presenta una interfaz genérica que oculta la manera como los servicios de red son implementados Http Petición cliente GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3 Host: www.example.com Accept: */* Http Respuesta servidor HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Accept-Ranges: bytes Content-Length: 14 Vary: Accept-Encoding Content-Type: text/plain Hello World! Cliente usando HttpURLs java.net.HttpURLConnection http://download.oracle.com/javase/7/docs/api/java/net/HttpURLConnection.html URL dir = new URL("http://es.wikipedia.org/"); HttpURLConnection conn = (HttpURLConnection) dir.openConnection(); conn.getRequestMethod(); conn.getResponseCode(); conn.getResponseMessage(); conn.getHeaderFields();//devuelve un objeto Map Ejercicio Cree un cliente que, usando HttpURL, se conecte con "http://es.wikipedia.org/" El cliente deberá recuperar y presentar al usuario la siguiente información Método de Request Código de Response Mensaje de Response Información de Header El contenido Ejecutar cliente de referencia java -cp ./U1red.jar red.ClientHttpURL [http://es.wikipedia.org/] Juego Cree un cliente y un servidor que jueguen a adivinar un número El servidor, para cada cliente que se conecte, debe seleccionar un número aleatorio Pedirle al cliente que lo adivine Por cada nùmero enviado por el cliente el servidor deberá decir Muy bajo, muy alto, OK Cuando el número sea adivinado la conexión deberá cerrarse para poder recibir un nuevo cliente