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 ...
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.