#include "rd.h" main (argc, argv) int argc; char *argv[]; { char dir[DIRSIZE]; int sd, len_addr; struct sockaddr_in serv_addr, clie_addr; struct hostent *hp; /* Deschide un socket */ if ((sd = socket (AF_INET, SOCK_DGRAM, 0)) < 0) ERR ("socket", 1); /* Obtine adresa IP a serverului */ if (!(hp = gethostbyname (argv[1]))) ERR ("gethostbyname", 2); /* Pregateste adresa server pentru conexiune */ memset ((char *) &serv_addr, 0, sizeof (serv_addr)); serv_addr.sin_family = AF_INET; memcpy (hp->h_addr, (char *) &serv_addr.sin_addr.s_addr, hp->h_length); serv_addr.sin_port = htons (PORT_SERVER); /* Pregateste adresa client pentru bind */ memset ((char *) &clie_addr, 0, sizeof (clie_addr)); clie_addr.sin_family = AF_INET; clie_addr.sin_addr.s_addr = htonl (INADDR_ANY); clie_addr.sin_port = htons (0); /* bind */ if (bind (sd, (struct sockaddr *) &clie_addr, sizeof (clie_addr)) < 0) ERR ("bind", 3); /* Trimite o cerere catre server */ if (sendto (sd, argv[2], strlen (argv[2]), 0, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0) ERR ("sendto", 4); /* Asteapta raspunsul de la server */ len_addr = sizeof (serv_addr); memset ((char *) &serv_addr, 0, len_addr); if (recvfrom (sd, dir, DIRSIZE, 0, (struct sockaddr *) &serv_addr, &len_addr) < 0) ERR ("recvfrom", 5); /* Tipareste rezultatul */ printf ("%s\n", dir); close (sd); } /* Programul 3.9 Sursa clientului rdcu.c */