Ir a inicioFavoritosRecomiéndanos El Prisma.com - Ingeniería de Sistemas
Inicio > Regresar a Ingeniería de Sistemas 817 visitantes activos
Sockets - Comunicación entre Procesos Distribuidos



Navigation bar
  Start Previous page
 4 of 14 
Next page End 1 2 3 4 5 6 7 8 9  

     Indica el formato de las direcciones que podrán tomar los sockets y los protocolos
que soportarán dichos sockets.   
     La estructura genérica es  
     struct sockaddr {  
               u__short     sa__family;         /* familia */
               char         sa__data[14];       /* dirección */
          };
Pueden ser:  
     * Dominio AF_UNIX ( Address Family UNIX ):  
               El cliente y el servidor deben estar en la misma máquina. Debe incluirse el
fichero cabecera /usr/include/sys/un.h. La estructura de una dirección en este
dominio es:  
               struct sockaddr__un {  
               short          sun__family;  /* en este caso AF_UNIX */
               char          sun__data[108]; /* dirección */
                    };
     * Dominio AF_INET ( Address Family INET ):  
               El cliente y el servidor pueden estar en cualquier máquina 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 dirección en
este dominio es:  
               struct in__addr {  
                    u__long     s__addr;
               };
               struct sockaddr__in {  
               short          sin_family;  /* en este caso AF_INET */
               u__short     sin_port;   /* numero del puerto */
               struct in__addr          sin__addr; /* direcc Internet */
               char          sin_zero[8];    /* campo de 8 ceros */
                    };
          Estos dominios van a ser los utilizados en xshine. Pero existen otros como:  
     * Dominio AF_NS:  
          Servidor y cliente deben estar en una red XEROX.  
     * Dominio AF_CCITT:  
          Para protocolos CCITT, protocolos X25, ...  
4.3.- FILOSOFIA CLIENTE-SERVIDOR: el Servidor.
     Vamos a explicar el proceso de comunicación servidor-cliente en modo
conectado, modo utilizado por las aplicaciones estándar de Internet (telnet, ftp). El
servidor es el proceso que crea el socket no nombrado y acepta las conexiones a él.
El orden de las llamadas al sistema para la realización de esta función es:  
1º) int socket ( int dominio, int tipo, int protocolo )   
          crea un socket sin nombre de un dominio, tipo y p  
rotocolo específico  
          dominio   : AF_INET, AF_UNIX  
          tipo      : SOCK__DGRAM, SOCK__STREAM  
          protocolo : 0 ( protocolo por defecto )  
2º) int bind ( int dfServer, struct sockaddr* direccServer, int longDirecc )  
          nombra un socket: asocia el socket no nombrado de descriptor dfServer con la
dirección del socket almacenado en direccServer. La dirección depende de si estamos
en un dominio AF_UNIX o AF_INET.  
3º) int listen ( int dfServer, int longCola )  
          especifica el máximo número de peticiones de conexión pendientes.  
4º) int accept ( int dfServer, struct sockaddr* direccCliente, int* longDireccCli)  
          escucha al socket nombrado servidor dfServer y espera hasta que se reciba la
petición de la conexión de un cliente. Al ocurrir esta incidencia, crea un socket sin
nombre con las mismas características que el socket servidor original, lo conecta al
socket cliente y devuelve  
un descriptor de fichero que puede ser utilizado para la comunicación con el cliente.  
4.4.- El Cliente.
     Es el proceso encargado de crear un socket sin nombre y posteriormente enlazarlo
con el socker servidor nombrado. O sea, es el proceso que demanda una conexión al
servidor. La secuencia de llamadas al sistema es:  
1º) int socket ( int dominio, int tipo, int protocolo )   
          crea un socket sin nombre de un dominio, tipo y protocolo específico  
          dominio   : AF_INET, AF_UNIX  
          tipo      : SOCK__DGRAM, SOCK__STREAM  
          protocolo : 0 ( protocolo por defecto )  
2º) int connect ( int dfCliente, struct sockaddr* direccServer, int longDirecc )  
          intenta conectar con un socket servidor cuya dirección se encuentra incluida en
la estructura apuntada por direccServer. El descriptor dfCliente se utilizará para
comunicar con el socket servidor. El tipo de estructura dependerá del dominio en que
nos encontremos.  
Una vez establecida la comunicación, los descriptores de ficheros serán utilizados
para almacenar la información a leer o escribir.  
SERVIDOR                                                      .                           CLIENTE  
descrServer = socket ( dominio,
SOCK_STREAM,PROTOCOLO)  
descrClient = socket (dominio,
SOCK_STREAM,PROTOCOLO)  
bind (descrServer,
PuntSockServer,longServer)  
Previous page Top Next page
Inicio Última Actualización 2/7/2012 Sugerencias
 
Guía MBA y Masters
Conoce los mejores programas de MBA
Executive MBA y Global MBA