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



Navigation bar
  Start Previous page
 12 of 14 
Next page End 7 8 9 10 11 12 13 14  

int cliente ( char *nombre, int tipo )  
{
 
int dfCliente, resultado, internet, dominio, longServidor, puerto, time_out=0;  
char nombreHost[100];  
struct sockaddr_un direccUNIXServidor;  
struct sockaddr_in direccINETServidor;  
struct sockaddr* puntDireccSockServidor;  
struct hostent* estructHost;  
struct in_addr* nodoHost;  
/*  Abriremos un socket cliente con un nombre y tipo específico */  
  internet = direccionInternet ( nombre );   /* ¿es socket internet? */  
dominio = internet ? AF_INET : AF_UNIX;  
dfCliente = socket (dominio, SOCK_STREAM, PROTOCOLO_DEFECTO);  
if (dfCliente == -1)  
   {  
     mandaPadre(SIGERRCLISOCK);   
      return(FALSE);  
   }  
if (internet)    /* es un socket internet */  
   {  
     obtenerHostyPuerto (nombre, nombreHost, &puerto);  
     if (nombreHost[0] == NULL) gethostname (nombreHost,100);  
     direccINETServidor.sin_family = AF_INET;  
     estructHost = gethostbyname (nombreHost);  
     if (estructHost==NULL)  
      {  
        mandaPadre(SIGERRCLISOCK);   
         return (FALSE);  
      }  
     nodoHost = (struct in_addr*) estructHost->h_addr;  
     /*printf("Direccion IP %s \n", inet_ntoa (*nodoHost));*/  
       
      direccINETServidor.sin_addr = *nodoHost;    /* nos da la direccion IP */  
     direccINETServidor.sin_port = puerto;       /* nos da el puerto de comunic */   
      puntDireccSockServidor = (struct sockaddr*) &direccINETServidor;  
     longServidor = sizeof (direccINETServidor);  
   }  
else    /* socket del dominio UNIX */  
   {  
     direccUNIXServidor.sun_family = AF_UNIX;  
     strcpy (direccUNIXServidor.sun_path, nombre);  
     puntDireccSockServidor = (struct sockaddr*) &direccUNIXServidor;  
     longServidor = sizeof (direccUNIXServidor);  
   }  
do  /* conexion a un servidor */  
   {  
   
      resultado = connect (dfCliente, puntDireccSockServidor, longServidor);  
     if (resultado == -1) { sleep (SOCKET_DORMIR); time_out++; }  
     if (time_out == 2 ) {  
                         mandaPadre(SIGERRCLISOCK);   
                          return(FALSE);   
                          }  
   }  
while (resultado == -1);  
if (tipo == SOCKET_SALIDA) dup2 (dfCliente, STDOUT);  
if (tipo == SOCKET_ENTRADA) dup2 (dfCliente, STDIN);    
      
  close (dfCliente);  /* cierra el descriptor del fichero cliente original */  
return (TRUE);  
}  /* fin de cliente */  
/*  
*--------------------------------------------------------  
*
 
*    PROTOTIPO:   int servidor (char* , int )  
*
 
*    DESCRIPCION: implementa el manejo del socket servidor  
*
 
*--------------------------------------------------------  
*/  
int servidor ( char *nombre, int tipo )  
{
 
int dfServidor, dfCliente, longServidor, longCliente;  
int dominio, internet, puerto;  
char nombreHost[100];  
struct sockaddr_un direccUNIXServidor;  
struct sockaddr_un direccUNIXCliente;  
struct sockaddr_in direccINETServidor;  
struct sockaddr_in direccINETCliente;  
struct sockaddr* puntDireccSockServidor;  
struct sockaddr* puntDireccSockCliente;  
  internet = direccionInternet (nombre);  
dominio = internet ? AF_INET : AF_UNIX;  
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