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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Introducción</strong> a <strong>los</strong> <strong>sockets</strong> <strong>en</strong> <strong>Java</strong> P3-7<br />

Po<strong>de</strong>mos realizar el vaciado <strong>de</strong>l buffer <strong>de</strong> forma automática al escribir<br />

<strong>en</strong> éste (sin t<strong>en</strong>er que emplear el método flush explícitam<strong>en</strong>te). Para ello<br />

necesitamos dos cosas:<br />

• El constructor <strong>de</strong> la clase PrintWriter <strong>de</strong>be emplearse tal y como<br />

se ha mostrado antes, con un segundo parámetro adicional a true.<br />

• La escritura <strong>de</strong>be realizarse mediante el método println(), <strong>en</strong><br />

lugar <strong>de</strong>l método print. A<strong>de</strong>más el método println aña<strong>de</strong> el final<br />

<strong>de</strong> línea con lo que no necesitamos escribirlo como parte <strong>de</strong> la ord<strong>en</strong><br />

que <strong>en</strong>vía el cli<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> lo que hemos hecho <strong>en</strong> el<br />

programa anterior).<br />

Vamos a modificar nuestro cli<strong>en</strong>te para comprobar este funcionami<strong>en</strong>to.<br />

Ejercicio 7:<br />

Modifica el cli<strong>en</strong>te SMTP para que utilice el método println <strong>en</strong> lugar <strong>de</strong>l<br />

print (elimina lo que sobra, como la secu<strong>en</strong>cia \r\n y el flush). Comprueba<br />

que funciona volvi<strong>en</strong>do a establecer conexión con el servidor zoltar <strong>en</strong> el puerto<br />

25.<br />

NOTA: Hay que t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que cuando usamos el método println, lo<br />

que se <strong>en</strong>vía como final <strong>de</strong> línea es \n. El estándar especifica que <strong>de</strong>be <strong>en</strong>viarse<br />

\r\n. No obstante, como podéis haber comprobado al usar println, el<br />

programa funciona correctam<strong>en</strong>te. Esto es <strong>de</strong>bido a la g<strong>en</strong>erosidad <strong>de</strong>l servidor,<br />

que contesta a la petición a pesar <strong>de</strong> que no se ajusta completam<strong>en</strong>te al estándar.<br />

Po<strong>de</strong>mos ajustarnos fácilm<strong>en</strong>te al estándar <strong>de</strong>fini<strong>en</strong>do <strong>los</strong> finales <strong>de</strong> línea como<br />

\r\n con la s<strong>en</strong>t<strong>en</strong>cia System.setProperty (“line.separador”, ”\r\n”);<br />

7. Cierre <strong>de</strong> la conexión<br />

Las conexiones se cierran mediante el método c<strong>los</strong>e() <strong>de</strong> la clase<br />

Socket. Una vez que un socket se ha cerrado, ya no está disponible para<br />

volverlo a utilizar (por ejemplo, no pue<strong>de</strong> ser reconectado). En caso<br />

necesario, hay que volver a crear un nuevo socket. Si este socket t<strong>en</strong>ía un<br />

flujo asociado, el flujo se cierra también.

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

Saved successfully!

Ooh no, something went wrong!