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