/* programme client pour se connecter à rebours-s */ /* lancer rebours-c adr_ip_serveur (ou nom_serveur) numero_port */ #include #include #include #include #include #include #include #define MAXBUF 256 extern int errno; int main(int argc, char *argv[]) { struct in_addr addr; struct hostent *infos; struct sockaddr_in sa; char *serveur; int nblus,port, sd, erreur, j; char buffer[MAXBUF]; serveur = argv[1]; port = atoi(argv[2]); /* si le param1 est un nom, on récupère l'adresse IP associée */ if (inet_aton(serveur, &addr) == 0) { infos = gethostbyname(argv[1]); /* l'adresse ip est récupérée sous forme d'une suite de 4 caractères */ /* on la tranforme en un entier */ addr.s_addr = *((unsigned long int *)(infos -> h_addr)); } /* mise en place d'un tube de communication */ sd = socket(AF_INET,SOCK_STREAM,0); /* configuration des paramètres du tube */ sa.sin_family = AF_INET; /* numéro de port du serveur */ /* converti en notation réseau */ /* pour pb big endian, little endian */ sa.sin_port = htons(port); /* adresse ip du serveur */ sa.sin_addr= addr; /* connection du tube vers le serveur */ erreur = connect(sd, (struct sockaddr *)&sa,sizeof(sa)); if (erreur == -1) perror("Erreur: "); else { /* lecture des données envoyées par le serveur */ while (nblus = read(sd,buffer,MAXBUF)) { buffer[nblus] = '\0'; printf("%s",buffer); } } /* fermeture de la communication */ close(sd); }