Sie sind auf Seite 1von 5

Unidad 2 Programacin Cliente/Servidor de bajo nivel Sockets y Canales

no son ms que puntos o mecanismos de comunicacin entre


procesos que permiten que un proceso hable ( emita o reciba informacin ) con
otro proceso incluso estando estos procesos en distintas mquinas. Esta
caracterstica de interconectividad entre mquinas hace que el concepto de
socket nos sirva de gran utilidad. Esta interfaz de comunicaciones es una de
las distribuciones de Berkeley al sistema UNIX, implementndose las utilidades
de interconectividad de este Sistema Operativo ( rlogin, telnet, ftp, ... ) usando
sockets.
Los sockets

Un socket es al sistema de comunicacin entre ordenadores lo que un buzn


o un telfono es al sistema de comunicacin entre personas: un punto de
comunicacin entre dos agentes ( procesos o personas respectivamente ) por
el cual se puede emitir o recibir informacin. La forma de referenciar un socket
por los procesos implicados es mediante un descriptor del mismo tipo que el
utilizado para referenciar ficheros. Debido a esta caracterstica, se podr
realizar redirecciones de los archivos de E/S estndar (descriptores 0,1 y 2) a
los sockets y as combinar entre ellos aplicaciones de la red. Todo nuevo
proceso creado heredar, por tanto, los descriptores de sockets de su padre.
La comunicacin entre procesos a travs de sockets se basa en la
filosofa CLIENTE-SERVIDOR: un proceso en esta comunicacin actuar
de proceso servidor creando un socket cuyo nombre conocer el proceso cliente,
el cual podr "hablar" con el proceso servidor a travs de la conexin con
dicho socket
nombrado.
El proceso crea un socket sin nombre cuyo valor de vuelta es un descriptor
sobre el que se leer o escribir, permitindose una comunicacin bidireccional,
caracterstica propia de los sockets y que los diferencia de los pipes, o canales
de comunicacin unidireccional entre procesos de una misma mquina. El
mecanismo de comunicacin va sockets tiene los siguientes pasos:
1) El proceso servidor crea un socket con nombre y espera la
conexin.
2)
El
proceso
cliente
crea
un
socket
sin
nombre.
3) El proceso cliente realiza una peticin de conexin al socket
servidor.
4) El cliente realiza la conexin a travs de su socket mientras el
proceso servidor mantiene el socket servidor original con
nombre.
Es muy comn en este tipo de comunicacin lanzar un proceso hijo, una vez
realizada la conexin, que se ocupe del intercambio de informacin con el
proceso cliente mientras el proceso padre servidor sigue aceptando
conexiones. Para eliminar esta caracterstica se cerrar el descriptor del socket
servidor con nombre en cuanto realice una conexin con un proceso socket
cliente.
-> Todo socket viene definido por dos caractersticas fundamentales:

- El tipo del socket, que indica la naturaleza del mismo, el tipo de


comunicacin
que
puede
generarse
entre
los
sockets.
- El dominio del socket especifica el conjunto de sockets que pueden
establecer
una
comunicacin
con
el
mismo.
Vamos

estudiar

4.1.-

con

ms

detalle

Tipos

estos

dos

aspectos:

de

sockets.

Define las propiedades de las comunicaciones en las que se ve envuelto un


socket, esto es, el tipo de comunicacin que se puede dar entre cliente y
servidor.
Estas
pueden
ser:
Fiabilidad
de
transmisin.
Mantenimiento
del
orden
de
los
datos.
No
duplicacin
de
los
datos.
El
"Modo
Conectado"
en
la
comunicacin.
Envo
de
mensajes
urgentes.
Los

tipos

disponibles

son

los

siguientes:

* Tipo SOCK_DGRAM: sockets para comunicaciones en modo no conectado,


con envo de datagramas de tamao 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 vas y con tamao variable de los mensajes de datos. Por debajo, en
dominios
Internet,
subyace
el
protocolo TCP.
* Tipo SOCK_RAW: permite el acceso a protocolos de ms bajo nivel como
el IP (
nivel
de
red
)
* Tipo SOCK_SEQPACKET: tiene las caractersticas del SOCK_STREAM
pero
adems
el
tamao
de
los
mensajes
es
fijo.
4.2.-

El

dominio

de

un

socket.

Indica el formato de las direcciones que podrn tomar los sockets y los
protocolos
que
soportarn
dichos
sockets.
La
estructura
genrica
es
struct
u__short
char
};

Pueden

sockaddr
sa__family;
sa__data[14];

/*
/*

familia
direccin

{
*/
*/

ser:

Dominio AF_UNIX (

Address

Family

UNIX

):

El cliente y el servidor deben estar en la misma mquina. Debe


incluirse el fichero cabecera /usr/include/sys/un.h. La estructura de una direccin
en
este
dominio
es:
struct
short
char
};

sun__family;
sun__data[108];

/*

sockaddr__un
en
este
/*

caso
AF_UNIX
direccin

{
*/
*/

Dominio AF_INET (
Address
Family
INET
):
El cliente y el servidor pueden estar en cualquier mquina de la red
Internet. Deben incluirse los ficheros cabecera /usr/include/netinet/in.h,
/usr/include/arpa/inet.h, /usr/include/netdb.h . La estructura de una direccin en este
dominio
es:
struct
u__long

in__addr

s__addr;

};
struct
short
sin_family;
u__short sin_port;
struct
in__addr
char
sin_zero[8];
};

sockaddr__in
/*
en
este
caso
/*
numero
del
sin__addr;
/*
direcc
/*
campo
de
8

AF_INET
puerto
Internet
ceros

{
*/
*/
*/
*/

Estos dominios van a ser los utilizados en xshine. Pero existen otros
como:
*
Servidor

cliente

deben

estar

en

una

Dominio AF_NS:
red
XEROX.
Dominio AF_CCITT:

Para protocolos CCITT, protocolos X25, .

Transcripcin de Creacion / Implementacin y


Supresin de Sockets
Creacion / Implementacin y Supresin de Sockets
Creacin
Cuando se escriben programas Java que se comunican a travs de la red, se
est
programando en la capa de aplicacin.
Tpicamente, no se necesita trabajar con las capas TCP y UDP, en su lugar
se puede utilizar las clases del paquete java.net. Estas clases
proporcionan comunicacin de red independiente del sistema.
Implementacin
Supresin

Siempre deberemos cerrar los canales de entrada y salida que se hayan


abierto durante la
ejecucin de la aplicacin.
Es importante destacar que el orden de cierre es relevante. Es decir, se
deben cerrar
primero los streams relacionados con un socket antes que el propio socket,
ya que de esta forma
evitamos posibles errores de escrituras o lecturas sobre descriptores ya
cerrados.
- Socket: Implementa un extremo de la conexin TCP.
- ServerSocket: Se encarga de implementar el extremo Servidor de la
conexin en la
que se esperarn las conexiones de los clientes.
- DatagramSocket: Implementa tanto el servidor como el cliente cuando se
utiliza UDP.
- DatagramPacket: Implementa un datagram packet, que se utiliza para la
creacin de
servicios de reparto de paquetes sin conexin.
Servidor
Socket miServicio;
try {
miServicio = new ServerSocket( numeroPuerto );
} catch( IOException e ) {
System.out.println( e );
}
Cliente
Socket miCliente;
try {
miCliente = new Socket( "maquina",numeroPuerto );
} catch( IOException e ) {
System.out.println( e );
}
Implementar un Servidor
A la hora de la implementacin de un servidor tambin necesitamos crear
un objeto
socket desde el ServerSocket para que est atento a las conexiones que le
puedan realizar
clientes potenciales y poder aceptar esas conexiones:
Socket socketServicio = null;

try {
socketServicio = miServicio.accept();
} catch( IOException e ) {
System.out.println( e );
}
Streams
DataInputStream entrada;
try {
entrada =
new DataInputStream( socketServicio.getInputStream() );
} catch( IOException e ) {
System.out.println( e );
}
PrintStream salida;
try {
salida = new PrintStream( miCliente.getOutputStream() );
} catch( IOException e ) {
System.out.println( e );
}
Cerrar Sockets
En la parte del cliente:
try {
salida.close();
entrada.close();
miCliente.close();
} catch( IOException e ) {
System.out.println( e );
}
Y en la parte del servidor:
try {
salida.close();
entrada.close();
socketServicio.close();
miServicio.close();
} catch( IOException e ) {
System.out.println( e );
}

Das könnte Ihnen auch gefallen