15.05.2013 Views

Práctica 3: Introducción a los sockets en Java - Redes de ...

Práctica 3: Introducción a los sockets en Java - Redes de ...

Práctica 3: Introducción a los sockets en Java - Redes de ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

P3-2 <strong>Práctica</strong>s <strong>de</strong> <strong>Re<strong>de</strong>s</strong> <strong>de</strong> Computadores<br />

2. Cómo establecer conexión con un servidor<br />

La clase java.net.Socket es la clase <strong>Java</strong> fundam<strong>en</strong>tal para<br />

realizar operaciones TCP <strong>de</strong>s<strong>de</strong> el extremo cli<strong>en</strong>te. A partir <strong>de</strong> aquí nos<br />

referiremos a ella como clase Socket. Esta clase posee varios constructores<br />

que permit<strong>en</strong> especificar el host <strong>de</strong>stino y el número <strong>de</strong> puerto al que<br />

queremos conectarnos. El host pue<strong>de</strong> especificarse como un objeto<br />

InetAddress (que correspon<strong>de</strong> a una dirección IP) o como un String. El<br />

número <strong>de</strong> puerto siempre se indica como un valor int que pue<strong>de</strong> variar<br />

<strong>de</strong>s<strong>de</strong> el 1 al 65.535.<br />

Empezaremos probando el costructor más s<strong>en</strong>cillo: ”public Socket<br />

(String host, int puerto) throws IOException,<br />

UnknownHostException”<br />

Este constructor crea un socket TCP e int<strong>en</strong>ta conectarlo al host y<br />

puerto remotos especificados como parámetros. Si el servidor DNS no está<br />

<strong>en</strong> funcionami<strong>en</strong>to o no pue<strong>de</strong> resolver el nombre, el constructor lanzará una<br />

excepción UnknownHostException. Si el nombre se resuelve pero el<br />

socket no pue<strong>de</strong> conectar por alguna otra razón, se lanzará una excepción<br />

IOException. Esto pue<strong>de</strong> <strong>de</strong>berse, <strong>en</strong>tre otras razones, a que el puerto<br />

<strong>de</strong>stino <strong>en</strong> el servidor no esté abierto, existan problemas <strong>de</strong> <strong>en</strong>caminami<strong>en</strong>to<br />

<strong>en</strong> la red para alcanzar el <strong>de</strong>stino o simplem<strong>en</strong>te el servidor especificado<br />

esté apagado.<br />

Ejercicio 1:<br />

Escribe un programa <strong>en</strong> java, “Cli<strong>en</strong>teTCP1.java”, que sea capaz <strong>de</strong> aceptar<br />

dos parámetros <strong>de</strong> <strong>en</strong>trada <strong>en</strong> línea <strong>de</strong> órd<strong>en</strong>es para establecer una conexión: el<br />

nombre <strong>de</strong> un servidor y un número <strong>de</strong> puerto al que conectar <strong>en</strong> ese servidor. El<br />

programa <strong>de</strong>be visualizar un m<strong>en</strong>saje por pantalla indicando si la conexión se ha<br />

establecido o no. En caso <strong>de</strong> éxito <strong>de</strong>be mostrar también el número <strong>de</strong> puerto y<br />

el nombre <strong>de</strong>l servidor con el que ha conectado, y <strong>en</strong> caso <strong>de</strong> fallo indicar el<br />

motivo: “Nombre <strong>de</strong> servidor <strong>de</strong>sconocido” o “No es posible realizar conexión”,<br />

<strong>de</strong>p<strong>en</strong>di<strong>en</strong>do el tipo <strong>de</strong> excepción ocurrida (ver notas <strong>en</strong> página sigui<strong>en</strong>te).<br />

Prueba tu programa con <strong>los</strong> sigui<strong>en</strong>tes servidores y puertos, comprobando lo que<br />

suce<strong>de</strong>:<br />

1. mail.re<strong>de</strong>s.upv.es 25<br />

2. hero<strong>de</strong>s.re<strong>de</strong>s.upv.es 25<br />

3. zoltar.re<strong>de</strong>s.upv.es 25

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!