Simple web server en java utilizando sockets

Simple web server en java utilizando sockets

Simple web server en java

Como ya os dije, voy a seguir subiendo el mismo simple web server de ejemplo usando socket, y en esta ocasión será con java.

En el post de Simple web server en c utilizando sockets , explicaba por encima las funciones de los socket, esta vez como en las siguientes vereís gran similitud en el funcionamiento.

Para empezar os voy a dejar la documentación de socket y server socket de java, y para continuar nos ponemos con el código de ejemplo del simple web server en java.

import java.net.Socket;
import java.net.ServerSocket;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.File;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.nio.ByteBuffer;
import java.io.DataOutputStream;

// Primeramente iniciamos la clase principal
public class Webserver {
	public static void main(String[] args) throws Exception {
                
                // En primer lugar declaramos las variables del puerto, e iniciamos la clase ServerSocket en dicho puerto
		int port = 8080;
		ServerSocket serverSocket = new ServerSocket(port);
		System.err.println("Servidor corriendo en el puerto : " + port);

                // Arrancamos el loop principal donde conectaremos a los nuevos clientes
		while (true) {

                    // Aceptamos las conexiones entrantes de los clientes
		    Socket clientSocket = serverSocket.accept();
		    System.err.println("\nNuevo cliente conectado...");
			
                    // Declaramos las lecturas del buffer de entrada y salida del socket
		    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
		    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));

		    // Leemos el request para enviarle posteriormente las imágenes
		    String s = in.readLine();
		    if(s.length()>15)
			s = s.substring(0, 16);
		    System.out.println(s);

		    // A continuación mandamos la imágen icon
		    if (s.equals("GET /icono_1.png")) {
                        //Abrimos las imágen y leemos los bytes para mandarle la información al socket
			File file = new File("icono_1.png");
			FileInputStream fis = new FileInputStream(file);
			byte[] data = new byte[(int) file.length()];
			fis.read(data);
			fis.close();
                        
                        // Cabeceras con la info de la imágen
			DataOutputStream binaryOut = new DataOutputStream(clientSocket.getOutputStream());
			binaryOut.writeBytes("HTTP/1.0 200 OK\r\n");
			binaryOut.writeBytes("Content-Type: image/png\r\n");
			binaryOut.writeBytes("Content-Length: " + data.length);
			binaryOut.writeBytes("\r\n\r\n");
			binaryOut.write(data);

			binaryOut.close();
			
		    // Hacemos lo mismo para el favicon
		    } else if (s.equals("GET /favicon.ico")) {
			File file = new File("favicon.ico");
			FileInputStream fis = new FileInputStream(file);
			byte[] data = new byte[(int) file.length()];
			fis.read(data);
			fis.close();

			DataOutputStream binaryOut = new DataOutputStream(clientSocket.getOutputStream());
			binaryOut.writeBytes("HTTP/1.0 200 OK\r\n");
			binaryOut.writeBytes("Content-Type: image/x-icon\r\n");
			binaryOut.writeBytes("Content-Length: " + data.length);
			binaryOut.writeBytes("\r\n\r\n");
			binaryOut.write(data);

			binaryOut.close();
			
		    // Mandamos las cabeceras de la paǵina principal
		    } else {
			out.write("HTTP/1.1 200 OK\r\n");
		    	out.write("Content-Type: text/html; charset=UTF-8\r\n");
		    	out.write("\r\n");

		    	out.write("\n<!DOCTYPE html>\n");
		    	out.write("<html><head><title>Servidor Web en JAVA</title>\n");
		    	out.write("<style>body { background-color: #A9D0F5 }</style></head>\n");
		    	out.write("<body><center><h1>Hola mundo!</h1><br>\n");
		    	out.write("<img src=\"icono_1.png\"/></center></body></html>\n");
		    }
                    
                    // Cerramos que nos vamos
		    System.err.println("Conexión del cliente terminada!\n");
		    out.close();
		    in.close();
		    clientSocket.close();
		}
    }
}

Finalmente compilamos con "javac Webserver.java" y ejecutamos con "java Webserver"

Si os interesa ver los otros ejemplos de este mismo server en diferentes lenguajes os dejo los links aquí abajo.

Pin It on Pinterest