/* Modifikation unseres Time-Clients -- nur zur * Demo, so nicht sinnvoll */ #include #include #include #include #include #include #include #include # include #define SERVPORT 11011 #define CLIPORT 11012 int main(int argc, char **argv) { struct sockaddr_in serv_addr, cli_addr; struct hostent *hp; int fd; int n; char buf[BUFSIZ]; if (argc!=2) printf("usage: %s hostname\n", argv[0]), exit(1); if (!(hp = gethostbyname(argv[1]))) // IP-Adresse des Servers holen fprintf(stderr, "unknown host: %s\n", argv[1]), exit(1); memset(&serv_addr,0, sizeof(serv_addr)); // mit 0en fuellen serv_addr.sin_family = AF_INET; // TCP/IP-Verbindung serv_addr.sin_port = htons(SERVPORT);// Port eintragen, Network Byte Order // Serveraddresse eintragen memcpy(&serv_addr.sin_addr.s_addr,hp->h_addr, hp->h_length); memset(&cli_addr,0, sizeof(cli_addr)); // mit 0en fuellen cli_addr.sin_family = AF_INET; // TCP/IP-Verbindung cli_addr.sin_port = htons(0);// Port eintragen, Network Byte Order cli_addr.sin_addr.s_addr = htonl(INADDR_ANY); if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) <0) perror("socket"), // Socket erzeugen exit(1); if (bind(fd, (struct sockaddr *) &cli_addr, sizeof(cli_addr)) <0) perror("bind"), // lokale Adresse binden exit(1); if ( sendto(fd, "TIME", 5, 0, (struct sockaddr *) & serv_addr, sizeof(serv_addr)) < 0) { perror("Client: sendto"); exit(2); } shutdown(fd,1); if (( n = recvfrom(fd, buf, sizeof(buf),0, (struct sockaddr *) 0, (int *) 0)) < 0 ) { perror("Client: recvfrom"); exit(3); } buf[n] = '\0'; printf("%.*s", n, buf); close(fd); exit(0); }