Un servidor HTTP en cinco minutos
Marzo 24th, 2004 - [Enlace local]
Estaba el otro día haciendo el friki con la tarjeta
inalámbrica de mi portátil en la cafetaría de
la universidad y un compañero también tenía un
portátil con wireless. Así que montamos una red
de ordenador a ordenador. Una vez conectados
y verificando que podemos acceder el uno al otro
pienso… voy a pasarte unos archivos. ¿Pero cómo?
Tengo un ibook desde hace poco y no sabía como
compartir mis archivos, así que ni corto ni perezoso
le dije a mi compañero: “¡Espera que hago un servidor web!”.
Y aquí está el código:
import java.io.*;
import java.net.*;
public class Servidor {
public static void main(String args[]) throws Exception {
int port = Integer.parseInt(args[0]);
ServerSocket ss = new ServerSocket(port);
Socket s = null;
System.out.println(\"Servidor escuchando en: \"+port);
while((s = ss.accept()) != null){
System.out.println(\"Conexion recibida\");
OutputStream os = s.getOutputStream();
InputStream in = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
int espacio;
espacio = line.indexOf(\" \");
String uri = line.substring(espacio+1, line.indexOf(\" \", espacio+1));
uri = uri.substring(1, uri.length());
File f = new File(uri);
FileInputStream fis = new FileInputStream(f);
os.write(\"HTTP/1.1 200 OK\r\n\".getBytes());
os.write(\"Content-length: \".getBytes());
os.write((fis.available()+\"\").getBytes());
os.write(\"\r\n\".getBytes());
os.write(\"Content-type: text/plain\r\n\".getBytes());
os.write(\"\r\n\".getBytes());
int size = fis.available();
for(int i=0; i<size; i++)
os.write(fis.read());
os.close();
fis.close();
s.close();
System.out.println(\"peticion finalizada\");
}
}
}
Ejecutas por ejemplo
java Servidor 8080
Y escribes por ejemplo: http://localhost:8080/Servidor.java en el navegador.
Verás el propio código fuente del programa.
Voy a añadir alguna cosilla, como que liste el contenido de un dirctorio
y lo mandaré a la sección “Código útil” de javaHispano.