• No se han encontrado resultados

Laboratorio Nº 6: Realización de Sockets bajo JAVA con Direcciones IPV6 Locales del sitio

In document DOCUMENTO FINAL (página 99-102)

3. SERVICIOS: LABORATORIOS DE LOS PROTOCOLOS TCP (PROTOCOLO DE CONTROL DE TRANSMISIÓN) E IP (PROTOCOLO DE INTERNET)

3.7. Laboratorio Nº 6: Realización de Sockets bajo JAVA con Direcciones IPV6 Locales del sitio

96

0.3.4.c.b.d.e.f.f.f.5.5.2.0.2.0.0.0.0.0 IN PTR cicom30.optativa.com.

5. Probar el servidor DNS.

5.1 Iniciar el servidor named

* Entrar a la herramienta de configuración: drakconf

* Ubicarse en Sistema (Servicios)

* buscar el servicio y demonios: named

* Selecccionar (check) Al iniciar y hacer clic en Iniciar

* Verificar que diga corriendo (si no es así verificar los archivos anteriores) 5.2 Ejecutar nslookup y hacer algunas consultas

Ejemplos:

o > www.optativa.com <enter>

o >dns.optativa.com <enter>

o >172.29.44.125 <enter>

o >172.29.25.188 <enter>

o fec0::202:55ff:fedb:ddca <enter>

o fec0::202:55ff:febf:7ba0 <enter>

5.3 Salir de nslookup Exit

97

Los usuarios invocan la parte cliente de la aplicación, que construye una solicitud para ese servicio y se la envía al servidor de la aplicación que usa TCP/IP como transporte.

El servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta. Generalmente un servidor puede tratar múltiples peticiones (múltiples clientes) al mismo tiempo.

Fig. 35. Modelo Cliente/Servidor. Fuente: (Autor) Tipos de sockets

SOCK_STREAM: Los sockets de este tipo permiten comunicaciones fiables en modo conectado y eventualmente autorizan, según el protocolo aplicado los mensajes fuera de flujo.

El protocolo subyacente en el dominio Internet es TCP. Se establece un circuito virtual realizando una búsqueda de enlaces libres que unan los dos ordenadores a conectar (parecido a lo que hace la red telefónica conmutada para establecer una conexión entre dos teléfonos). Una vez establecida la conexión, se puede proceder al envío secuencial de los datos, ya que la conexión es permanente. Son streams de bytes full-dúplex (similar a pipes). Un socket stream debe estar en estado conectado antes de que se envíe o reciba en él.

SOCK_DGRAM: Corresponde a los sockets destinados a la comunicación en modo no conectado para el envío de datagramas de tamaño limitado. En el dominio Internet, el protocolo subyacente es el UDP. Los datagramas no trabajan con conexiones permanentes. La transmisión por los datagramas es a nivel de paquetes, donde cada paquete puede seguir una ruta distinta, no garantizándose una recepción secuencial de la información.

Pasos para programar un cliente

• Abrir un socket y conectarse a un servidor (apertura activa).

• Crear un flujo de entrada y salida al socket.

98

• Leer desde el socket y escribir datos al socket de acuerdo al protocolo del servidor.

• Cierre de conexiones.

Pasos para programar un Servidor

• Abrir un socket servidor (apertura pasiva).

• Abrir un socket cliente y ponerlo a escuchar solicitud de conexión de un cliente.

• Crear un flujo de entrada y salida al socket cliente.

• Leer desde el socket y escribir datos al socket cliente.

• Cerrar conexiones con el cliente.

SOCKET EN JAVA 1. SERVIDOR TCP

1.1 Crear el socket servidor

Para hacer el servidor en java se tiene la clase ServerSocket. Al instanciarla se usa el constructor al que se le pasa un número de servicio (de puerto).

Este número de puerto puede ser cualquier entero entre 0 y 65535. Los números de 0 a 1023 están reservados para servicios del sistema (como ftp, mail, www, telnet ). Del 1024 en adelante se usan como desee. Lo único es que no puede haber dos servidores atendiendo al mismo puerto/servicio.

ServerSocket socket = new ServerSocket (3001);

1.2 Aceptar un cliente

Una vez creado el servidor, se le dice que empiece a atender conexiones de clientes. Para esto se llama al método accept(). Este método se queda bloqueado hasta que algún cliente se conecta.

Devuelve un Socket, que es la conexión con dicho cliente.

Socket cliente = socket.accept();

Podemos aceptar simultáneamente varios clientes, pero para atenderlos necesitaremos programación multitarea o algo similar.

1.3 Obtener el InputStream y/o OutputStream

Ahora en cliente tenemos la conexión con el cliente (valga la redundancia). Lo único que hay que hacer es obtener de él el OuputStream o InputStream con los métodos getOutputStream() o getInputStream(). La clase OutpuStream sirve para enviarle datos al cliente. La clase InputStream sirve para leer datos del cliente.

InputStream entrada = cliente.getIntputStream();

OutputStream salida = cliente.getOutputStream();

99

Se construirá un InputStream y/o un OutputStream más adecuados a nuestras necesidades.

Los métodos de estas dos clases para leer o escribir datos son un poco feos, ya que únicamente envían bytes. Suele ser habitual construir alguna otra clase de entrada/salida de datos que tenga métodos más adecuados:

Si se quiere enviar o recibir tipos normales (enteros, flotantes, strings) se tienen las clases DataInputStream y DataOutputStream. Estas clases tienen un constructor que admite un InputStream y un OutputStream respectivamente.

DataInputStream entradaDatos = new DataInputStream (entrada);

DataOuputStream salidaDatos = new DataOutputStream (salida);

1.4 Envió/Lectura de datos normales (enteros, flotantes, strings)

El envío/lectura de datos normales se hace con las clases DataInputStream y DataOutputStream.

No tienen ningún truco especial, basta usar el método adecuado (writeInt(), writeFloat(), readInt() ). Para strings se usaran los métodos writeUTF() y readUTF(), que envían/leen las cadenas en formato UTF.

1.5 Cierre del socket

Para cerrar un socket hay que llamar a la función close().

cliente.close(); // Con esto se cierra la conexión con el cliente.

socket.close(); // Con esto se cierra el socket servidor, ya no se atienden más conexiones.

In document DOCUMENTO FINAL (página 99-102)