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