2. Conceptos básicos de la comunicación
con Sockets TCP/IP
TCP:
En ese anticuado analogía centralita, el
zócalo tiene dos conectores
conectados a teléfono de cada cliente:
uno es un receptáculo, y el otro es un
tapón. Piense en estos conectores
como los puertos, sino porque el
puerto está asociado con un teléfono,
juntos hacen una toma, como el
puerto TCP o UDP, cuando se combina
con una dirección IP es un socket.
IP:
En el lado del servidor de la conexión es
una dirección IP para el servidor y un
puerto para hacer una toma en el host del
servidor. Para establecer una conexión
entre la capa de aplicación de cliente y la
capa de aplicación de servidor es una
conexión virtual entre estos dos sockets.
3. Direcciones IP y Puertos.
Direccion IP:
Una dirección IP es un número de
32 bits que identifica de manera
lógica y jerárquica a una interfaz
de un dispositivo (habitualmente
una computadora) dentro de una
red que utilice el protocolo IP
(Internet Protocolo).
Puertos:
Una vez que el mensaje llega a la IP de destino
es necesario conocer a que programa/proceso
hay que entregarlo. Esta es la función
del número de puerto: un número de puerto
es un número de 16 bits (de 1 a 65535) que
sirve para identificar el proceso al que
entregar el mensaje dentro de la máquina.
4. ¿Qué es un socket?
Un socket es una interfaz de entrada-salida de datos que permite la
intercomunicación entre procesos. Los procesos pueden estar ejecutándose en
el mismo o en distintos sistemas, unidos mediante una red. Un identificador de
socket es una pareja formada por una dirección IP y un puerto. Cuando un
programa crea un socket puede solicitarle al sistema operativo que asocie un
número de puerto con el socket.
5. Clase de sockets y SocketServer.
Clase de sockets:
Tipo SOCK_DGRAM: sockets para comunicaciones en modo no conectado, con
envío de datagramas de tamaño limitado ( tipo telegrama ). En dominios
Internet 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.
SocketServer:
TCPServer: Esto utiliza el protocolo TCP de
Internet, que proporciona flujos continuos de
datos entre el cliente y el servidor.
UDPServer: Esto usa datagramas, que son
paquetes discretos de información que pueden
llegar fuera de orden o perderse mientras están
en tránsito.
UnixStreamServer y UnixDatagramServer: Estas
clases utilizadas con menos frecuencia son
similares a las clases TCP y UDP, pero usan sockets
de dominio Unix; no están disponibles en
plataformas que no sean Unix.
6. Sockets y Streams
Sockets:
Los sockets son basicamente formas en las que
podemos interconectar 2 (o mas) programas
mediante el uso de la internet. En java se
utilizan para poder crear conexiones utilizando
basicamente una IP/hostname y un puerto
para establecer la conexión. Para aprender
podemos utilizarla para conenctar 2
programas por medio de Internet.
Stream:
Un Streams es un medio utilizado para leer
datos de una fuente y para escribir datos en
un destino. Tanto la fuente como el destino
pueden ser archivos, sockets, memoria,
cadena de caracteres, y también procesos.
Los Streams se caracterizan por se
unidireccionales, es decir que un Stream se
utilizara solo para leer, solo para escribir, pero
no ambas acciones al mismo tiempo.
7. Sockets y threads
Sockets:
Desde dos clases Test (TestServidor y TestCliente)
hice las pruebas, corrí primero TestServidor y el
servidor arrancó y se puso a la espera del cliente.
Luego corro TestCliente y muestra los mensajes
que debe mostrar y cierra la conexión y ya. Si
quiero volver a probarlo tengo que volver a correr
TestServidor y TestCliente. Estas pruebas son en
localhost.
Threads:
Hace unos días veíamos cómo hacer que un
programa cliente y un programa servidor
intercambiaran mensajes desde distintos
puntos de la red: Comunicación cliente-
servidor . Hoy veremos cómo hacer lo mismo
pero dando soporte a muchos clientes al
mismo tiempo utilizando para cada uno de
ellos un Thread o Hilo.