/* myclient.c */ #include #include #include #include #include #include #include #include #include #include #define BUF 1024 void remN(char *s) { char *p2 = s; while(*s != '\0') { if(*s != '\t' && *s != '\n') { *p2++ = *s++; } else { ++s; } } *p2 = '\0'; } bool startsWith(const char *pre, const char *str) { size_t lenpre = strlen(pre), lenstr = strlen(str); return lenstr < lenpre ? false : memcmp(pre, str, lenpre) == 0; } int main (int argc, char **argv) { int create_socket; char buffer[BUF]; struct sockaddr_in address; int size; if( argc < 3 ){ printf("Usage: %s ServerAdresse Port\n", argv[0]); exit(EXIT_FAILURE); } if ((create_socket = socket (AF_INET, SOCK_STREAM, 0)) == -1) { perror("Socket error"); return EXIT_FAILURE; } memset(&address,0,sizeof(address)); address.sin_family = AF_INET; address.sin_port = htons (atoi(argv[2])); inet_aton (argv[1], &address.sin_addr); if (connect ( create_socket, (struct sockaddr *) &address, sizeof (address)) == 0) { printf ("\x1b[32mConnection with server (%s) established\n\x1b[0m", inet_ntoa (address.sin_addr)); size=recv(create_socket,buffer,BUF-1, 0); if (size>0) { buffer[size]= '\0'; printf("\x1b[36m%s\x1b[0m",buffer); } } else { perror("\x1b[31mConnect error - no server available\x1b[0m"); return EXIT_FAILURE; } bool login = false; do { //command vom user überprüfen char command[7] = ""; printf ("\n\x1b[35mEnter Command:\x1b[0m \n"); fgets (command, 7, stdin); if (startsWith("login", command) == true && login == false) { char username[10] = ""; char pw[50] = ""; char bufferString[BUF] = ""; strcpy(bufferString, "login;"); //User Dateneingabe und daten einlesen printf("\x1b[35m\x1b[0m\n"); fgets (username, 10, stdin); printf("\x1b[35m\x1b[0m\n"); //PW eingabe unsichtbar machen struct termios term, term_orig; tcgetattr(STDIN_FILENO, &term); term_orig = term; term.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &term); scanf("%s", pw); // Eingabe wieder sichtbar schalten tcsetattr(STDIN_FILENO, TCSANOW, &term_orig); strcat(bufferString, username); strcat(bufferString, ";"); strcat(bufferString, pw); remN(bufferString); send(create_socket, bufferString, strlen (bufferString), 0); //Response vom Server (OK oder ERR) empfangen und ausgeben char readBuffer[BUF] = ""; read(create_socket , readBuffer, 1023); remN(readBuffer); if (strcmp("OK", readBuffer) == 0) { printf("\n\x1b[32m%s\x1b[0m\n", readBuffer); login = true; }else if (strcmp("ERR", readBuffer) == 0 || strcmp("Client Gesperrt", readBuffer) == 0) { printf("\n\x1b[31m%s\x1b[0m\n", readBuffer); } }else if (login == false && startsWith("quit", command) == true) { strcpy(buffer, "quit\n"); }else if (login == false) { printf("\x1b[33mBitte zuerst eingeben. Erst danach können sie auf das Program zugreifen!\x1b[0m\n"); } if(login == true){ //je nach command wird was audgeführt if(startsWith("send", command) == true) { char sender[10] = ""; char empfaenger[10] = ""; char betreff[82] = ""; char nachricht[128] = ""; char bufferString[BUF] = ""; strcpy(bufferString, ""); strcat(bufferString, "send"); //User Dateneingabe und daten einlesen printf("\x1b[35m\x1b[0m\n"); fgets (sender, 10, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (empfaenger, 10, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (betreff, 82, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (nachricht, 82, stdin); //Buffer formatieren strcat(bufferString, ";"); strcat(bufferString, sender); strcat(bufferString, ";"); strcat(bufferString, empfaenger); strcat(bufferString, ";"); strcat(bufferString, betreff); strcat(bufferString, ";"); strcat(bufferString, nachricht); remN(bufferString); send(create_socket, bufferString, strlen (bufferString), 0); //Response vom Server (OK oder ERR) empfangen und ausgeben char readBuffer[BUF] = ""; read(create_socket , readBuffer, 1024); printf("\n%s\n", readBuffer); }else if(startsWith("list", command) == true) { char bufferString[BUF] = "list"; char username[10] = ""; char p[22] = ""; int counter = 0; printf("\x1b[35m\x1b[0m\n"); fgets (username, 10, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (p, 22, stdin); strcat(bufferString, ";"); strcat(bufferString, username); strcat(bufferString, ";"); strcat(bufferString, p); remN(bufferString); send(create_socket, bufferString, strlen (bufferString), 0); char readBuffer[BUF] = ""; read(create_socket , readBuffer, 1024); char delimiter[] = ";"; char *ptr; ptr = strtok(readBuffer, delimiter); while(ptr != NULL) { if(strcmp(ptr, ".") == 0) { }else if(strcmp(ptr, "..") == 0) { }else if (counter == 0) { printf("\x1b[35m\x1b[0m\n", ptr); }else { printf("Betreff: %s \n", ptr); } counter = counter + 1; // naechsten Abschnitt erstellen ptr = strtok(NULL, delimiter); } }else if(startsWith("read", command) == true) { char bufferString[BUF] = "read"; char username[10] = ""; char nid[82] = ""; char folder[22] = ""; printf("\x1b[35m\x1b[0m\n"); fgets (username, 10, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (folder, 22, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (nid, 82, stdin); strcat(bufferString, ";"); strcat(bufferString, username); strcat(bufferString, ";"); strcat(bufferString, folder); strcat(bufferString, ";"); strcat(bufferString, nid); remN(bufferString); send(create_socket, bufferString, strlen (bufferString), 0); char readBuffer[BUF] = ""; read(create_socket , readBuffer, 1000); printf("\n%s\n", readBuffer ); }else if(startsWith("del", command) == true) { char username[10] = ""; char nachrichtennummer[82] = ""; char bufferString[BUF] = "del"; char p[22] = ""; printf("\x1b[35m\x1b[0m\n"); fgets (username, 10, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (p, 22, stdin); printf("\x1b[35m\x1b[0m\n"); fgets (nachrichtennummer, 82, stdin); strcat(bufferString, ";"); strcat(bufferString, username); strcat(bufferString, ";"); strcat(bufferString, p); strcat(bufferString, ";"); strcat(bufferString, nachrichtennummer); remN(bufferString); send(create_socket, bufferString, strlen (bufferString), 0); char readBuffer[BUF] = ""; read(create_socket , readBuffer, 1024); printf("\n%s\n", readBuffer ); }else if(startsWith("quit", command) == true) { strcpy(buffer, "quit\n"); }else { printf("DAS IST KEIN COMMAND!!!!!"); } } }while (strcmp (buffer, "quit\n") != 0); close (create_socket); return EXIT_SUCCESS; }