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