/* --------------------------------------------------------------------- */ /* Programa CLIENTE para implementar interconexion entre procesos */ /* Ricardo Ortega O. 2000 - 2002 */ /* --------------------------------------------------------------------- */ #include #include #include #include #include struct sockaddr_in midireccion; /* socket para direccion del local */ struct sockaddr_in sudireccion; /* socket para direccion del remoto */ struct hostent *hp; /* pointer para informacion de host remoto */ int s; /* Socket para conexion */ char respuesta [40]; /* Buffer para la respuesta */ char nombre [100]; void Enviar_Nombre (void); void Recibir_Respuesta (void); main(int argc, char *argv[]) { int addrlen, i, j; if (argc != 2) { fprintf(stderr, "Forma de uso: %s \n", argv[0]); exit(1); } hp = gethostbyname (argv[1]); if (hp == NULL) { fprintf(stderr, "%s: %s no existe en /etc/hosts\n", argv[0], argv[1]); exit(1); } sudireccion.sin_family = AF_INET; sudireccion.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr; sudireccion.sin_port = 8801; s = socket (AF_INET, SOCK_STREAM, 0); if (s == -1) { fprintf(stderr, "%s: No puede crear el socket\n", argv[0]); exit(1); } if (connect (s, (struct sockaddr *)&sudireccion, sizeof(struct sockaddr)) == -1) { fprintf(stderr, "%s: No se puede conectar al remoto\n", argv[0]); exit(1); } addrlen = sizeof (struct sockaddr); if (getsockname (s, (struct sockaddr *)&midireccion, &addrlen) == -1) { fprintf(stderr, "%s: No se puede obtener la direccion del socket\n", argv[0]); exit(1); } printf ("Conectado a %s en puerto %u\n", argv[1], ntohs(midireccion.sin_port)); for ( ; ; ) { printf ("Escriba el nombre de la capital o pais sudamericano a consultar (sin tildes)\n"); printf ("(Deje el nombre en blanco para salir del programa)\n"); // no importa el uso de gets porque nombre es de 100 bytes, suficiente. gets (nombre); if (nombre[0] == 0) break; Enviar_Nombre (); Recibir_Respuesta (); if (respuesta[0] == 0) printf ("El psrograma server no tiene registrada la palabra %s\n", nombre); else printf ("%s corresponde a %s\n", nombre, respuesta); } printf ("Fin del programa.\n"); } void Enviar_Nombre (void) { send (s, nombre, 40, 0); } void Recibir_Respuesta (void) { int i, j; i = recv (s, respuesta, 40, 0); if (i == -1) exit(1); } /* --------------------------------------------------------------------- */