PDF de programación - Capitulo 5. Sockets

Imágen de pdf Capitulo 5. Sockets

Capitulo 5. Socketsgráfica de visualizaciones

Publicado el 14 de Mayo del 2019
430 visualizaciones desde el 14 de Mayo del 2019
109,9 KB
15 paginas
Creado hace 18a (30/06/2005)
CAPITULO 5. SOCKETS


Una de las grandes potencias del lenguaje de programación Java es la total
portabilidad de sus programas gracias a su "máquina virtual". Esto adquiere una
importancia aún mayor en Internet donde existen tipos de computadoras muy
diferentes.
Las siguientes bibliotecas de la API de Java contienen una serie de clases que
son interesantes de cara a la creación de aplicaciones que trabajen en red. Las
más importantes son:

java.applet: Da soporte a las applets.
java.net: Clases para redes. Dan acceso a TCP/IP, sockets y URLs.
Existen otras bibliotecas más complejas, orientadas también a la programación
como son las siguientes:


java.sql: Paquete que contiene el JDBC, para conexión de programas Java
con Bases de datos.
java.rmi: Paquete RMI, para localizar objetos remotos, comunicarse con
ellos e incluso enviar objetos como parámetros de un objeto a otro.
org.omg.CORBA: Facilita la posibilidad de utilizar OMG CORBA, para la
conexión entre objetos distribuidos, aunque estén codificados en distintos
lenguajes.
org.omb.CosNaming : Da servicio al IDL de Java, similar al RMI pero en
CORBA.

Una de las características de Java que lo hacen especialmente interesante
para Internet es que sus programas objeto (códigos de byte) son verificables para
poder detectar posibles virus en sus contenidos. Estos programas Códigos de byte
no necesitan ser recompilados, y una vez verificados (pues Java trabaja con
nombres no con direcciones), se transforman en direcciones físicas de la máquina
destino.



M.E Carmen Cerón G

Programación Concurrente

109

Figura 1. : Ejecución de un código de byte


Esta forma de trabajar cuida la seguridad sin un grave perjuicio de la eficiencia. Un
programa en Java es sólo unas 20 veces más lento que uno programado en C,
cifra aceptable para la mayoría de las tareas, y suponiendo que no se utilice un
compilador JIT.


• El paquete java.net

Java ofrece un conjunto de clases que permiten utilizar los URLs (Uniform
Resource Locators). Un URL es una dirección electrónica que permite
encontrar una información en Internet especificando:



El nombre del protocolo que permitirá leer la información. Por ejemplo HTTP.

El nombre del servidor que proporciona
sunsite.unc.edu o bien una dirección IP directamente.

El nombre del fichero en el servidor. Por ejemplo /Javafaq/Javafaq.htm.

información. Por ejemplo

la



5.1 Fundamentos

Los sockets son un sistema de comunicación entre procesos de diferentes
máquinas de una red. Más exactamente, un socket es un punto de comunicación
por el cual un proceso puede emitir o recibir información.

Fueron popularizados por Berckley Software Distribution, de la universidad
norteamericana de Berkley. Los sockets han de ser capaces de utilizar el protocolo
de streams TCP (Transfer Contro Protocol) y el de datagramas UDP (User
Datagram Protocol).

Utilizan una serie de primitivas para establecer el punto de comunicación, para
conectarse a una máquina remota en un determinado puerto que esté disponible,
para escuchar en él, para leer o escribir y publicar información en él, y finalmente
para desconectarse.


Con todas primitivas se puede crear un sistema de diálogo muy completo.

M.E Carmen Cerón G

Programación Concurrente

110

Imagen 10: Funcionamiento de una conexión socket



Los sockets son puntos finales de enlaces de comunicaciones entre procesos. Los
procesos los tratan como descriptores de ficheros, de forma que se pueden
intercambiar datos con otros procesos transmitiendo y recibiendo a través de
sockets.

El tipo de sockets describe la forma en la que se transfiere información a través de
ese socket.

Sockets Stream (TCP, Transport Control Protocol)

Son un servicio orientado a conexión donde los datos se transfieren sin
encuadrarlos en registros o bloques. Si se rompe la conexión entre los procesos,
éstos serán informados.

El protocolo de comunicaciones con streams es un protocolo orientado a conexión,
ya que para establecer una comunicación utilizando el protocolo TCP, hay que
establecer en primer lugar una conexión entre un par de sockets. Mientras uno de
los sockets atiende peticiones de conexión (servidor), el otro solicita una conexión

M.E Carmen Cerón G

Programación Concurrente

111

(cliente). Una vez que los dos sockets estén conectados, se pueden utilizar para
transmitir datos en ambas direcciones.

Sockets Datagrama (UDP, User Datagram Protocol)

Son un servicio de transporte sin conexión. Son más eficientes que TCP, pero no
está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya
entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o
llegar en un orden diferente al que se envió.

El protocolo de comunicaciones con datagramas es un protocolo sin conexión, es
decir, cada vez que se envíen datagramas es necesario enviar el descriptor del
socket local y la dirección del socket que debe recibir el datagrama. Como se
puede ver, hay que enviar datos adicionales cada vez que se realice una
comunicación.

Sockets Raw

Son sockets que dan acceso directo a la capa de software de red subyacente o a
protocolos de más bajo nivel. Se utilizan sobre todo para la depuración del código
de los protocolos.

Diferencias entre Sockets Stream y Datagrama

Ahora se nos presenta un problema, ¿qué protocolo, o tipo de sockets, debemos
usar - UDP o TCP? La decisión depende de la aplicación cliente/servidor que
estemos escribiendo. Vamos a ver algunas diferencias entre los protocolos para
ayudar en la decisión.

En UDP, cada vez que se envía un datagrama, hay que enviar también el
descriptor del socket local y la dirección del socket que va a recibir el datagrama,
luego éstos son más grandes que los TCP. Como el protocolo TCP está orientado
a conexión, tenemos que establecer esta conexión entre los dos sockets antes de
nada, lo que implica un cierto tiempo empleado en el establecimiento de la
conexión, que no existe en UDP.

En UDP hay un límite de tamaño de los datagramas, establecido en 64 kilobytes,
que se pueden enviar a una localización determinada, mientras que TCP no tiene
límite; una vez que se ha establecido la conexión, el par de sockets funciona como
los streams: todos los datos se leen inmediatamente, en el mismo orden en que se
van recibiendo.

UDP es un protocolo desordenado, no garantiza que los datagramas que se hayan
enviado sean recibidos en el mismo orden por el socket de recepción. Al contrario,
TCP es un protocolo ordenado, garantiza que todos los paquetes que se envíen
serán recibidos en el socket destino en el mismo orden en que se han enviado.

M.E Carmen Cerón G

Programación Concurrente

112

Los datagramas son bloques de información del tipo lanzar y olvidar. Para la
mayoría de los programas que utilicen la red, el usar un flujo TCP en vez de un
datagrama UDP es más sencillo y hay menos posibilidades de tener problemas.
Sin embargo, cuando se requiere un rendimiento óptimo, y está justificado el
tiempo adicional que supone realizar la verificación de los datos, los datagramas
son un mecanismo realmente útil.

En resumen, TCP parece más indicado para la implementación de servicios de red
como un control remoto (rlogin, telnet) y transmisión de ficheros (ftp); que
necesitan transmitir datos de longitud indefinida. UDP es menos complejo y tiene
una menor sobrecarga sobre la conexión; esto hace que sea el indicado en la
implementación de aplicaciones cliente/servidor en sistemas distribuidos montados
sobre redes de área local.


B. Ejemplo de uso
Para comprender el funcionamiento de los sockets no hay nada mejor que estudiar
un ejemplo. El que a continuación se presenta establece un pequeño diálogo entre
un programa servidor y sus clientes, que intercambiarán cadenas de información.
a.) Programa Cliente
El programa cliente se conecta a un servidor indicando el nombre de la máquina y
el número puerto (tipo de servicio que solicita) en el que el servidor está instalado.
Una vez conectado, lee una cadena del servidor y la escribe en la pantalla:

import java.io.*;

import java.net.*;

class Cliente {

static final String HOST = "localhost";

static final int PUERTO=5000;

public Cliente( ) {

try{

Socket skCliente = new Socket( HOST , Puerto );

InputStream aux = skCliente.getInputStream();

DataInputStream flujo = new DataInputStream( aux );

System.out.println( flujo.readUTF() );

skCliente.close();

M.E Carmen Cerón G

Programación Concurrente

113


} catch( Exception e ) {

System.out.println( e.getMessage() );

}

}

public static void main( String[] arg ) {

new Cliente();

}

}

En primer lugar se crea el socket denominado skCliente, al que se le especifican el
nombre de host (HOST) y el número de puerto (PORT) en este ejemplo
constantes.

flujo de datos de dicho socket (obtenido mediante
Luego se asocia el
getInputStream)), que es asociado a un flujo (flujo) DataInputStream de lectura
secuencial. De dicho flujo capturamos una cadena ( readUTF() ), y la imprimimos
por pantalla (System.out).
El socket se cierra, una vez finalizadas las operaciones, mediante el método
close().

Debe observarse que se realiza una gestión de excepción para capturar los
posibles fallos tanto de los flujos de datos como del socket.

b.) Programa Servidor
El programa servidor se instala en un puerto
  • Links de descarga
http://lwp-l.com/pdf15912

Comentarios de: Capitulo 5. Sockets (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad