Está en la página 1de 7

Sockets en Java

Uso de Sockets
Este pequeo manual, le muestra cmo funciona el Socket Server para crear un pequeo servidor web que enva una pgina HTML a cualquier Navegador Web como Firefox, Internet Explorer, etc. By: John Michel Rivera de Len. Lionheart815@hotmail.com

La Creatividad proviene de un conflicto de ideas

By: John Michel Rivera de Len

Sockets en Java
Uso de Sockets Sockets Sockets
Los sockets (conectores) permiten la comunicacin de procesos. La comunicacin entre procesos consiste en la transmisin de un mensaje entre un conector de u proceso y un conector de otro proceso. Para los procesos receptores de mensajes, su conector debe estar asociado a un puerto local y a una de las direcciones de internet del computador donde se ejecuta, cada conector puede enviar como recibir. Un computador permite (2 ) puertos posibles, Cada conector se asocia con un protocolo concreto que puede ser TCP o UDP.
16

Este manual le muestra cmo crear un pequeo servidor web que enva una pgina HTML a cualquiera que ingresa Sockets en Java a su direccin IP por medio de un Navegador Web, sin necesidad de tener que instalar Un servidor web como Apache.

Utilizacin de TCP.
Muchos de los servicios utilizados se ejecutan sobre conexiones TCP, con nmero de puerto reservado. HTTP FTP SMTP 1

By: John Michel Rivera de Len

El API Java para los streams TCP.


La interfaz Java para los streams TCP est constituida por las clases ServerSocket y Socket.

ServerSocket
Esta clase esta diseada para ser utilizada por un servidor para crear un conector en el puerto de servidor que escucha las peticiones de conexin de los clientes. Su mtodo accept toma una peticin connect de la cola, si la cola esta vaca, se bloquear hasta que llega una peticin. EL resultado de ejecutar accept es una
Sockets en Java

instancia de socket, un conector que da acceso es una instancia de socket, un conector que da acceso a streams para comunicarse con el cliente.

Socket.
Esta clase es utilizada por el par de procesos de una conexin. El cliente utiliza un constructor para crear un conector, especificando el nombre de DNS de host y el puerto de servidor. Este constructor no solo crea el conector asociado con el puerto local, sino que tambin se conecta con el computador remoto especificado en el puerto indicado.

Caractersticas de la comunicacion entre procesos. Comunicacion asncrona y sncrona.


La comunicacin entre procesos puede ser sncrona o asncrona entre un emisor y un receptor. A cada destino de mensajes se asocia una cola. Los procesos emisores producen mensajes que sern aadidos a las colas remotas mientras que los procesos receptores eliminarn mensajes de las colas locales.

By: John Michel Rivera de Len

Sncrona.
Los procesos receptor y emisor se sincronizan con cada mensaje. En este caso, tanto enva como recibe son operaciones bloqueantes. A cada enva producido, el proceso emisor se bloquea hasta que se produce el correspondiente recibe. Cuando se invoca el recibe, el proceso se bloquea hasta que llega el mensaje.

Asncrona
La utilizacin enva es no bloqueante, de modo que el proceso emisor puede continuar tan pronto como el mensaje haya sido copiado en el bfer local, y la transmisin del menaje de lleva a cabo o en paralelo con el proceso emisor.
Sockets en Java

Creando un Servidor Web basico con Sockets


Creamos un clase que contendr un server socket que estar a la escucha de peticiones por el puerto 80. El server socket se queda a la espera hasta que una peticin llega, entonces lo acepta con la instruccin Socket remote = s.accept(); Una vez que se acepta el cliente, se le enva la informacin de las cabeceras HTTP, y posteriormente la pgina HTML. Una vez enviado todo, se libera el socket para aceptar una nueva conexin de algn cliente.

package servidorweb;

/** * * @author Lionel */ import java.net.*; import java.io.*;

public class ServidorWeb {

By: John Michel Rivera de Len

protected void start() { ServerSocket s; System.out.println("Servidor web iniciado en el puerto 80"); System.out.println("presione ctrl-c to exit"); try { // Crea el socket del servidor inicial s = new ServerSocket(80); } catch ( Exception e ) { System.out.println("Error: " + e ); return;

Sockets en Java

} System.out.println("Esperando Conexiones"); for ( ;; ) { try { // espera por una conexion Socket remote = s.accept(); // se acepta la conexion System.out.println("Conexion, Enviando datos."); BufferedReader in = new BufferedReader( new InputStreamReader(remote.getInputStream()) ); PrintWriter out = new PrintWriter(remote.getOutputStream());

// leer los datos enviados, // para de leer hasta que lee el fin de linea, es decir la linea en blanco // la linea en blaco es la seal de fin de las cabeceras HTTP

String str="."; while ( !str.equals("") ) str = in.readLine();

// Manda la respuesta // Manda las cabeceras out.println("HTTP/1.0 200 OK"); out.println("Content-Type: text/html");

By: John Michel Rivera de Len

out.println("Servidor: Bot"); // esta linea en blanco indica el final de las cabeceras out.println(""); // Mandamos la pagina HTML out.println( "<H1>Bienvenidos al servidor Web</H2>"); out.println( "<p>Esta es una pagina html de prueba xD.</p>"); out.println( "<p><marquee>---Fin de la pagina--- </marquee></p>"); out.flush(); //envia los datos remote.close(); } catch ( Exception e ) { System.out.println("Error: " + e ); } }

public static void main(String args[]) { ServidorWeb ws = new ServidorWeb(); ws.start(); }

Sockets en Java

By: John Michel Rivera de Len

Iniciamos el servidor web desde consola, con java jar *.jar:

Ingresamos desde un navegador web cualquier, en este caso fire fox:

Sockets en Java

Observamos que nos despliega la pgina web, y adems dentro del servidor se registra la entrada del cliente:

Y Listo. Ya creamos un Pequeo servidor web que enva una pgina HTML a cualquiera que ingrese a nuestra direccin IP, sin necesidad de instalar Apache o algn otro servidor web. Saludos xD. Visita mi perfil y busca todos los manuales disponibles como: JavaFx MPI Java (Computo paralelo con Java)

Creacion de Software matemtico y graficas 3D Servidores web, DNS, DHCP, Apache tomcat, Mono, PHP, MySQL, etc.

También podría gustarte