Este documento describe los sockets cliente-servidor y cómo funcionan las comunicaciones entre ellos. Los sockets permiten que los procesos se comuniquen transmitiendo mensajes entre sí a través de conexiones establecidas mediante protocolos como TCP/IP. Existen diferentes tipos de sockets como SOCK_DGRAM para comunicaciones no conectadas a través de UDP y SOCK_STREAM para comunicaciones fiables mediante TCP. El proceso de establecer una conexión implica que el servidor cree un socket con nombre y espere la conexión del cliente, mientras que el cliente crea un socket sin nombre y se cone
2. 2014-2015
INSTITUTO TECNOLOGICO “SAN GABRIEL”
Que son los sockets cliente servidor
Un socket es un mecanismo de comunicación entre dos o más procesos, gracias
al cual es posible enviar o recibir información. A efectos de programación un
socket funciona como un descriptor de ficheros de bajo nivel; comandos
como read() y write() funcionan con sockets de la misma forma que lo hacen con
ficheros y tuberías.
El conjunto de servicios que ofrece un socket fue diseñado para facilitar una
conexión entre procesos, tanto si se ejecutan en una sola máquina, como si lo
hacen en red. Los procesos se intercambian información transmitiendo datos a
través de mensajes que circulan entre un socket en un proceso y otro socket en
otro proceso. Para la comunicación entre máquinas se suelen utilizar los
protocolos TCP/IP, logrando así la independencia del hardware y de la
arquitectura de red mediante la cual se establece el enlace; siendo esto posible
gracias a la estructura en forma de capas que posee una red de ordenadores
(véase ). Los sockets son conexiones que pertenecen a la capa de transporte de
la estructura OSI. Una aplicación con sockets debe especificar los puertos de
protocolo local y remoto y la dirección IP remota que utilizará, si usará TCP o
UDP, y si iniciará transferencia o esperará por una conexión (es decir, si
funcionará como servidor o cliente).
Tipos de sockets
Define las propiedades de las comunicaciones en las que se ve envuelto un
socket, esto es, el tipo de comunicación que se puede dar entre cliente y servidor.
Estas pueden ser:
- Fiabilidad de transmisión.
- Mantenimiento del orden de los datos.
- No duplicación de los datos.
- El "Modo Conectado" en la comunicación.
- Envío de mensajes urgentes.
Los tipos disponibles son los siguientes:
* Tipo SOCK_DGRAM: sockets para comunicaciones en modo no
conectado,
con envío de datagramas de tamaño limitado ( tipo telegrama ). En dominios
Internet
3. como la que nos ocupa el protocolo del nivel de transporte sobre el que se basa es
el
UDP.
* Tipo SOCK_STREAM: para comunicaciones fiables en modo conectado,
de
dos vías y con tamaño variable de los mensajes de datos. Por debajo, en
dominios
Internet, subyace el protocolo TCP.
* Tipo SOCK_RAW: permite el acceso a protocolos de más bajo nivel como
el IP
( nivel de red )
* Tipo SOCK_SEQPACKET: tiene las características del SOCK_STREAM
pero
además el tamaño de los mensajes es fijo.
Comunicación entre sockets
Los socket se encuentran en la capa de transporte del modelo OSI, es decir
pueden ser UDP(no orientado a conexión) y TCP (orientado a conexión).
Los pasos para establecer una conexión son las siguientes:
1.El servidor crea un socket con nombre y espera la conexión del cliente
2.El proceso cliente crea un socket sin nombre
3.El proceso cliente realiza una petición al socket del servidor
4. El cliente realiza la conexión a través de su socket con el socket del servidor.
Implementación de los sockets
Para comenzar con la programación de sockets, resulta necesario comprender las
clases que ofrece Java. En primer lugar, la clase URL contiene constructores y
métodos para la manipulación de URL (Universal Resource Locator): un objeto o
servicio en Internet. El protocolo TCP necesita dos tipos de información: la
dirección IP y el número de puerto. Vamos a ver como podemos recibir entonces
la página Web siguiente:
http://www.yahoo.com
En primer lugar, Yahoo tiene registrado su nombre, permitiendo que se use
yahoo.com como su dirección IP, o lo que es lo mismo, cuando indicamos
yahoo.com es como si hubiésemos indicado 205.216.146.71, su dirección IP real.
Si queremos obtener la dirección IP real de la red en que estamos corriendo,
podemos realizar llamadas a los métodos getLocalHost() y getAddress(). Primero,
4. getLocalHost() nos devuelve un objeto iNetAddress, que si usamos con
getAddress() generará un array con los cuatro bytes de la dirección IP