#include #include #include #include #include #include #include #include #include int main(int argc, char *argv[]) { struct in_addr addr; struct hostent *infos; struct sockaddr_in sa; char *serveur; int port, sd, erreur; unsigned int temps; 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 { /* on recupere l'entier envoyé par le serveur */ read(sd,&temps,4); /* on le convertit et on soustrait le nombre de secondes écoulées depuis 1970 */ /* pour pouvoir utiliser ctime */ temps = ntohl(temps) - 2208988800; printf("%s\n",ctime((time_t *)&temps)); } /* fermeture de la communication */ close(sd); }