Los dominios .es cumplen 20 años

(1 comentario)

Los dominios .es cumplen 20 años, y lo hacen con muy buena salud, con más de un millón cien mil dominios registrados, decenas de agentes registradores acreditados, precios bastante razonables, y con el ESNIC, el registro delegado de Internet en España, haciendo, asombrosamente, un gran trabajo, para lo que nos tienen acostumbrados las administraciones públicas en España.

[Pulsa para continuar]

M-Lab, la respuesta de Google al capado P2P

(7 comentarios)

Leo en menéame que Google ha lanzado un nuevo sitio web en el que publicarán distintas herramientas dedicadas a diagnosticar nuestra conexión de forma sencilla. Este sitio, llamado M-Lab, es el resultado del esfuerzo de varias organizaciones académicas y ofrece, por ahora, tres aplicaciones distintas:

[Pulsa para continuar]

Sockets en Java

(19 comentarios)

En Java las comunicaciones se basan en sockets con los que trabajamos a través de flujos de datos como si de E/S de archivos se tratara. Los sockets se clasifican en sockets de flujo o sockets de datagramas dependiendo de si el servicio utiliza TCP (orientado a conexión y fiable) o UDP.

En el modelo de sockets de flujo contamos con un objeto de tipo Socket en el cliente y en el servidor uno o más objetos Socket asociados a un ServerSocket. La E/S se realiza a través de objetos InputStream y OutputStream asociados a los Sockets.

El servidor crea un socket servidor que tiene como parámetro el puerto en el que a va estar escuchando las peticiones entrantes:
ServerSocket servicio = new ServerSocket(9999);

accept se mantiene a la espera de conexiones entrantes, bloqueando la ejecución. Cuando se establece una conexión se devuelve una instancia de Socket con la que llevar a cabo la comunicación.
Socket socketServicio = servicio.accept();

Los clientes crean objetos Socket para comunicarse con el servidor, por ejemplo localhost en el puerto 9999:
Socket cliente = new Socket("localhost", 9999);

Una vez iniciada la conexión, podemos usar getOutputStream y getInputStream para obtener los flujos de salida y entrada de datos de los sockets.
PrintWriter salida = new PrintWriter(socketServicio.getOutputStream(), true);
BufferedReader entrada = new BufferedReader(new InputStreamReader(cliente.getInputStream()));

Y utilizar los métodos de los flujos de datos para enviar o recibir información del otro lado de la conexión:
salida.println("Soy el servidor");
System.out.println("Recibido " + entrada.readLine());

Por último, una vez terminada la ejecución, tenemos que cerrar los flujos de datos y el socket (en ese orden):
salida.close();
socketServicio.close();

entrada.close();
cliente.close();

Un ejemplo típico para enseñar estos conceptos en la práctica es un servidor eco, cuyo código podéis descargar a continuación. Para probarlo podeis utilizar telnet para conectaros al puerto 9999 en localhost (telnet localhost 9999) y por cada cadena de texto enviada al servidor, este nos responderá con el mismo texto. Utiliza el comando ‘bye’ para terminar la conexión.

Descarga ServidorEco.java