Sockets
Sockets
Taller de Java
do estándar de transferencia de archivos. Telnet es
SI LE GUSTAN LOS GRANDES RETOS, ¿POR QUÉ NO el modo estándar de realizar una conexión de ter-
ESCRIBIR EL SOFTWARE DE UN SERVIDOR WEB EN minal. SMTP y POP3 son las formas más comunes de
enviar y recibir correo electrónico, etc. Pero sea cual
MENOS DE 10K? DAVID GRIFFITHS LE MUESTRA sea el protocolo, todos hacen más o menos lo mismo:
CÓMO HACERLO. el software servidor tendrá una conversación estruc-
turada con otra máquina de la red durante la cual
s curioso las cosas que llegamos a recordar: la tendrá lugar una transferencia de información.
E Declaración de Independencia, el discurso I La Web utiliza un protocolo denominado HTTP ( Hy-
have a dream de Martin Luther King, el tercer verso pertext Transfer Protocol) y normalmente está al tan-
del Agadoo. En ciertas personas, las letras de una can- to del puerto número 80. En determinadas máquinas,
ción o el pasaje inicial de un libro en particular per- al servidor web se le dará una extensión diferente.
manecen con ellos durante años y en cierta manera Si esto es así, tendrá que hacer que su navegador
capturan el espíritu de un tiempo y de un lugar. Pa - «marque» un número diferente, por ejemplo:
ra mí fue el capítulo del manual del ZX81 que em - http://www.bigco.com:8000, donde 8000 es el nú-
pezaba con «El chip de 16 K de RAM, aparte de pro - mero de conexión.
porcionarnos memoria virtualmente ilimitada…» Al contrario de los protocolos tipo FTP o Telnet (cu-
Muchas veces he vuelto a consultar este pasaje, nor- ya conversación puede mantenerse durante horas),
malmente en mitad del tercer CD de una instala - HTTP es breve. Una conversación HTTP estándar nor-
ción de cuatro CD. Pero ¿realmente fue alguna vez malmente adopta la siguiente forma:
posible escribir algo que ocupara 16 K? Pues sí, lo era.
Y lo sorprendente es que aún lo es. Sr. Navegador: «Hola. Estos son mis detalles. Dame
Entonces ¿qué es lo que hace un servidor web? Ima - el archivo denominado X».
gine que su ordenador es un edificio de oficinas con Sr. Servidor: «Sí, lo tengo. Oh, es un archivo de tex-
su propia red telefónica. Lo más probable es que se to, aquí está. Bla, bla, bla.»
disponga de un número de teléfono principal para
la centralita (la dirección de Internet del ordena - Observará que durante la conexión sólo se envía un
dor) y que cada oficina tenga un enchufe en la pa - único archivo. ¿Cómo es posible esto si la mayoría
red y su propia extensión telefónica. Cuando escri- de páginas web contienen gran cantidad de imáge-
nes, sonidos, applets, etc.? La respuesta es sencilla.
Cuando se le dice al navegador que vaya a una di-
rección en concreto, empezará simplemente pidien-
do el archivo de la página web. Entonces, cuando
haya cortado la comunicación, leerá el archivo y verá
qué más necesita. A continuación volverá a llamar
para solicitar los archivos adicionales que la página
Una vez a empezado incluye.
Webservice desde una En la gloriosa época del Unix, crear un programa que
ventana de DOS, puede pudiera estar atento a una red presentaba una gran
usar su navegador para dificultad. Solamente una persona por década resolvía
conectarlo con: cómo hacerlo y normalmente no tenía amigos, así que
http://127.0.0.1:8080. no se lo contaba a nadie.
Por suerte, Java nos facilita considerablemente las co-
bimos el software para un servidor es algo así como sas. Java incluye una clase especial que realiza todo
colocar a alguien en la oficina para que responda al el trabajo por nosotros. Sorprendentemente se de-
teléfono. El software se situará allí y controlará las nomina ServerSocket. La forma de crear una cone-
conexiones (estará al tanto del tráfico de la red) y si xión al servidor es:
el teléfono suena contestará. La forma de respon -
der dependerá del protocolo de la «forma de fun - ssMain = new
cionamiento acordada», que estructurará todas las ServerSocket(portNo);
conversaciones que tengan lugar.
Hay montones de protocolos diferentes. FTP es el mo- Donde portNo es el número del puerto que quere-
mos atender. Si algún otro programa ya lo estuviera private void write(String
utilizando, obtendríamos la excepción «Address in text) {
use». Podemos detectar esto con algo parecido a lo byte b[] =
siguiente: text.getBytes();
write(b, 0,
try { text.length());
ssMain = new }
ServerSocket(portNo);
} y:
catch(IOException e) {
System.out. private void write(byte b[],
println(“IOException: “ + int start, int length) {
e.getMessage()); try {
} out.write(b, 0,
length);
Una vez creada la conexión, tendremos que instalar }
el software equivalente a un teléfono para que po- catch(IOException e) {
damos esperar a que suene. Podemos hacer que un }
ServerSocket espere la conexión de una red llaman- }
do a su método accept(); por ejemplo, así:
La primera convierte una cadena en un flujo de by-
socket = ssMain.accept();
Este comando estará esperando hasta que alguien lla- COMPILAR Y EJECUTAR
me. El objeto Socket que devuelve es como una co- ARCHIVOS.JAVA CON EL JDK
nexión telefónica, es decir, podemos hablarle y es -
cucharle. Nuestro servidor web puede tener que n primer lugar cree una carpeta especial
manejar muchas llamadas a la vez, así que crearemos E (por ejemplo C:\JWEB) en el disco duro
un objeto nuevo denominado Request para cada lla - y copie allí todos los archivos de este taller.
mada entrante. Debe tener instalado el Java Development Kit
Cada vez que recibamos un objeto Socket lo utili- en el PC, y tanto el directorio en curso como
zaremos para crear un nuevo objeto Request. Hare - la biblioteca de clases estándar deben estar
mos de Request una extensión de la clase Thread pa - incluidas en la variable CLASSPATH. Puede ve-
ra que el objeto WebService puede empezar a rificar que es así abriendo la ventana de DOS y
ejecutarla y después ponerse en contacto con cual- escribiendo:
quier otra cosa.
Los objetos Request necesitarán usar el objeto Soc- set
ket para crear formas de escuchar y hablar a la red.
Pueden hacer esto con los métodos getInputStream() El resultado debe ser algo así:
y getOutputStream() Socket:
.
out = new .
DataOutputStream(socket. PATH=C:\WINDOWS;C:\WINDOWS\
getOutputStream()); COMMAND;C:\JDK1.1.5\BIN
in = new BufferedReader(new CLASSPATH=.;C:\jdk1.1.5\lib
InputStreamReader .
(socket.getInputStream())); .
Para simplificar las cosas podemos crear un conjun- En el nuevo directorio escriba:
to de funciones de escritura, «write», que sean ca -
paces de enviar cadenas y matrices de bytes a través javac *.java
del flujo de salida, «out». Los datos tienen que enviarse
como bytes y no como cadenas, para evitar que Ja - Esto compilará los archivos de Java en el di-
va los corrompa con sus «útiles» pequeños caracte - rectorio.
res de control. Las dos funciones principales ‘write’
que crearemos son:
CURSOS
también esté conectada a una red. Si está utilizan- visitando: http://[la dirección interna de su PC]:8080.
do esta versión de Windows Sockets, tendrá que co- Para ello, los que le visiten tendrán que insertar la di-
nectarse a Internet antes para que el software de na - rección pública en Internet de su máquina (ya sea
vegación pueda llevarle a su servidor web. numérica o el nombre, por ejemplo, myaccount.dia-
Cuando haya comprobado el servidor web de forma lup.co.uk) y no 127.0.0.1.
local, puede conectarse a él a través de una red (In- Y aquí lo tenemos, un servidor web en... ohhh, poco
ternet o bien una red de área local) y permitir que menos de 6K. Clive Sinclair estaría orgulloso del tra-
otras máquinas accedan a su sede web. Puede hacerlo bajo que hemos hecho.