diff --git a/myclient.c b/myclient.c index 621c94b..bd4a7ce 100755 --- a/myclient.c +++ b/myclient.c @@ -8,8 +8,13 @@ #include #include #define BUF 1024 -#define PORT 6543 +//#define PORT 6543 +//Client Logik +//Im vorgehen ähnlich wie der server, wartet auf einen gewissen Befehl im Datenstrom +//Wird er gefunden, wird wieder mit dem mode und last die art des befehles und die durchführungsposition gemerkt. +//Bei list wird einiges empfangen und um dort ein ende zu signalisieren, wird dort auf LISTREADSTOPNOW\n gewartet, +//bis das Programm wieder fortsetzt. int main(int argc, char **argv) { char *meinport = argv[2]; @@ -105,12 +110,9 @@ int main(int argc, char **argv) if (size > 0) { buffer[size] = '\0'; - //if (strcmp(buffer, "LISTREADSTOPNOW\n") == 0) - //{ printf("\x1B[37m %s", buffer); - printf("CHECK LASTLINE: %d", strncmp(buffer, "LISTREADSTOPNOW\n", strlen("LISTREADSTOPNOW\n"))); - printf("CHECK LASTLINE other: %d", strcmp(buffer, "LISTREADSTOPNOW\n")); - //} + //printf("CHECK LASTLINE: %d", strncmp(buffer, "LISTREADSTOPNOW\n", strlen("LISTREADSTOPNOW\n"))); + //printf("CHECK LASTLINE other: %d", strcmp(buffer, "LISTREADSTOPNOW\n")); } } while (strncmp(buffer, "LISTREADSTOPNOW\n", strlen("LISTREADSTOPNOW\n")) != 0); diff --git a/myserver.c b/myserver.c index c9b43a3..a1f9907 100755 --- a/myserver.c +++ b/myserver.c @@ -9,20 +9,30 @@ #include #include #define BUF 1024 -#define PORT 6543 +//#define PORT 6543 +//Data Verzeichnis char *verzeichnis; +//Dateistruktur des Speichers der aktuellen Message Nummer struct msgNumber { int index; }; + +//Dateistruktur von Postein/ausgang struct msgNumberArr { int lenght; int index[1024]; }; +//Schreibt Nachrichten eines bestimmten Users(username) in ein file +//Dafür werden in msgNumbs die Message Nummern der zu speicherten Nachrichten gegeben +//lenght ist die anzahl der Message Nummern +//Nachrichten werden nach dem msgNumberArr struct gespeichert +//Return 0 = Fehler --> Entsprechende Fehlermeldung wird ausgegeben +//Return 1 = Erfolgreich int writeUsersMessages(char username[1024], int *msgNumbs, int lenght) { FILE *filePointer; @@ -32,7 +42,6 @@ int writeUsersMessages(char username[1024], int *msgNumbs, int lenght) strcat(filename, ".bin"); printf("Start writeUsersMessages() filename: %s\n", filename); filePointer = fopen(filename, "wb"); - /**/ if (!filePointer) { printf("\x1B[31mUser Message Speicher konnte nicht geschrieben werden!\x1B[37m\n"); @@ -50,7 +59,11 @@ int writeUsersMessages(char username[1024], int *msgNumbs, int lenght) fclose(filePointer); return 1; } - +//Holt alle nachrichten eines users(username) +//username wird als Pfad verwendet..... posteingang/ ..... postausgang/ +//liest die Nachrichten als msgNumberArr struct und gibt sie auch in dieser form zurück +//Return ein msgNumberArr struct mit der länge 0 = Fehler --> Entsprechende Fehler ausgabe +// .... länge > 0 = Erfolgreich struct msgNumberArr getUserMessages(char username[1024]) { FILE *filePointer; @@ -74,29 +87,26 @@ struct msgNumberArr getUserMessages(char username[1024]) } int i = 0; struct msgNumberArr msgNumbersStruct; - - //int msgNumberArr[1024]; - - //printf("Vorm while\n"); - //while(!feof(filePointer)) - //while (fread(&msgNumbers, sizeof(struct msgNumber), 1, filePointer)) - //{ - //printf("Im while\n"); - fread(&msgNumbersStruct, sizeof(struct msgNumberArr), 1, filePointer); - //} - //printf("Nach dem while\n"); fclose(filePointer); return msgNumbersStruct; } + +//Eine Nachricht wird den vorherigen User(username) Nachrichten hinzugefügt +//die nachricht wird mit der msgNumber angegeben +// +//Es wird zuerst versucht alle user Nachrichten mit getUserMessages() zu holen +//Wenn welche vorhanden sind, werden sie temporär in einem Array gespeichert, +//die neue Nummer wird hinzugefügt und es wird mit writeUsersMessages() gespeichert +// +//Sind keine vorherigen nachrichten vorhanden, dann wird eben nur die aktuelle nummer gespeichert int addUserMessage(char username[1024], int msgNumber) { if ('\n' == username[strlen(username) - 1]) { username[strlen(username) - 1] = '\0'; } - //username[strlen(username)-1] = "\0"; printf("addUserMessage(), username: %s, msgNumber: %d\n", username, msgNumber); int msgNumbers[1024]; struct msgNumberArr msgNumbersStruct = getUserMessages(username); @@ -131,7 +141,6 @@ int addUserMessage(char username[1024], int msgNumber) result = writeUsersMessages(username, newNumbers, nMsgs + 1); printf("Nach dem writeUsersMessages() result: %d", result); } - //free(msgNumbers); if (result == 0) { printf("\x1B[31mMessage konnte wegen eines fehlers, in writeUserMessages(), nicht gespeichert werden!\x1B[37m\n"); @@ -143,6 +152,9 @@ int addUserMessage(char username[1024], int msgNumber) } } +//Speichert die aktuelle Message Nummer in einer Datei nach dem msgNumber struct +// Return 0 = Fehler --> Entsprechende Meldung +// 1 = Erfolgreich int writeMessageNumber(int number) { FILE *filePointer; @@ -164,6 +176,11 @@ int writeMessageNumber(int number) return 1; } +//Liest die aktuelle Message Nummer +//Ist keine vorhanden, wird eine neue erstellt +// Return 0 = Fehler --> Entsprechende Meldung +// 1 = Speicher neu erstellt --> Entsprechende Meldung +// > 1 = Speicher gelesen int readLastMessageNumber() { FILE *filePointer; @@ -178,6 +195,7 @@ int readLastMessageNumber() int result = writeMessageNumber(1); if (result == 0) { + printf("\x1B[31mMessage Nummer Speicher konnte nicht geschrieben werden!"); return 0; } else @@ -191,6 +209,12 @@ int readLastMessageNumber() return my_record.index; } +//Liest die aktuelle Message Nummer mit readLastMessageNumber() +//und rechnet +1 um die neue Message Nummer zu bekommen, +//die neue Nummer wird dann auch gleich mit writeMessageNumber() in ein File geschrieben +//Return 0 = Fehler --> Entsprechende Mitteilung +// 1 = Nicht möglich, da immer +1 gerechnet wird +// > 1 = Erfolgreiche Abfrage int getNextMessageNumber() { int msgNumber = readLastMessageNumber(); @@ -216,11 +240,16 @@ int getNextMessageNumber() } } } +//Dateistruktur einer Nachricht struct rec { char *sender, *receiver, *betreff, *msg; }; +//Liest ein Nachrichten File, ergebnis ist ein rec struct +//filename gibt den dateinamen an, z.b. 7 +//Return das rec struct der Datei +//Error --> Wenn die Datei nicht gelesen werden konnte struct rec readFile(char filename[1024]) { FILE *filePointer; @@ -233,30 +262,22 @@ struct rec readFile(char filename[1024]) if (!filePointer) { perror("\x1B[31mFile konnte nicht gelesen werden!\x1B[37m\n"); - //printf("\x1B[31mFile konnte nicht gelesen werden!\x1B[37m\n"); - //struct rec nullstruct; - //nullstruct.sender = "0"; - //nullstruct.receiver = "0"; - //nullstruct.betreff = "0"; - //nullstruct.msg = "0"; - //return &nullstruct; } - printf("A"); struct rec *my_record; - //struct rec *my_record_p = malloc(sizeof(struct rec)); - printf("B"); fread(my_record, sizeof(struct rec), 1, filePointer); - printf("C"); printf("\nBETREFF in readFile(): %s", my_record->betreff); - printf("D"); fclose(filePointer); - //my_record_p->betreff = my_record.betreff; - //my_record_p->sender = my_record.sender; - //my_record_p->receiver = my_record.receiver; - //my_record_p->msg = my_record.msg; return *my_record; } +//Schreibt eine neue Nachricht in eine File, anhand des rec struct +//zuerst wird die neue Message Nummer mit getNextMessageNumber() ermittelt +//Danach ein neues File geöffnet und mit dem rec struct befüllt +//Danach werden den usern die in sender und receiver angegeben wurden mit addUserMessage(), +//die gesendeten/empfangenen nachrichten gespeichert +// +//Return 0 = Fehler --> Entsprechende Message +// 1 = Erfolgreich int writeToFile(char sender[1024], char betreff[1024], char receiver[1024], char message[1024]) { FILE *filePointer; @@ -315,31 +336,11 @@ int writeToFile(char sender[1024], char betreff[1024], char receiver[1024], char } } } - -//struct rec *readFromFile(char msgNumber[1024]) -//{ -// FILE *filePointer; -// char filename[1024]; -// strcpy(filename, msgNumber); -// strcat(filename, ".bin"); -// filePointer = fopen(filename, "rb"); -// struct rec *my_record_pointer = malloc(sizeof(struct rec)); -// struct rec my_record; -// if (!filePointer) -// { -// perror("\x1B[31mWrite File konnte nicht geöffnet werden!\x1B[37m\n"); -// } -// else -// { -// -// fread(&my_record, sizeof(struct rec), 1, filePointer); -// fclose(filePointer); -// printf("\n\nReadFile Number: %s Betreff: %s\n\n", msgNumber, my_record.betreff); -// my_record_pointer = &my_record; -// return my_record_pointer; -// } -//} - +//Main Funktion, beeinhaltet die Server Logik +//Wenn ich in dem Datenstrom einen der Gesuchten Befehle finde, +// dann "schalte ich in den entsprechenden modus um", indem ich in +//int mode den aktuellen befehl speichere. Mit int last wird der +//aktuelle programmschritt gespeichert int main(int argc, char **argv) { verzeichnis = strdup(argv[1]); @@ -414,7 +415,6 @@ int main(int argc, char **argv) bufferString[0] = '\0'; buffer[0] = '\0'; fflush(stdout); - //recToSave.sender = sender; break; case 2: last += 1; @@ -423,7 +423,6 @@ int main(int argc, char **argv) char empf[1024]; strcat(empf, bufferString); recToSave.receiver = strdup(bufferString); - //recToSave.receiver = empf; bufferString[0] = '\0'; buffer[0] = '\0'; fflush(stdout); @@ -435,7 +434,6 @@ int main(int argc, char **argv) char betreff[1024]; strcat(betreff, bufferString); recToSave.betreff = strdup(bufferString); - //recToSave.betreff = betreff; bufferString[0] = '\0'; buffer[0] = '\0'; break; @@ -447,7 +445,6 @@ int main(int argc, char **argv) char msg[1024]; strcat(msg, bufferString); recToSave.msg = strdup(bufferString); - //recToSave.msg = msg; printf("BUFFER STRING: %s", bufferString); bufferString[0] = '\0'; buffer[0] = '\0'; @@ -485,20 +482,14 @@ int main(int argc, char **argv) printf("->LIST->Username wurde eingegeben:\x1B[33m %s\x1B[37m\n", bufferString); char *username; username = strdup(bufferString); - //POSTEINGANG char filename[1024]; strcpy(filename, "posteingang/"); strcat(filename, username); printf("Filename: %s ENDE\n", filename); - struct msgNumberArr msgNumbersStruct = getUserMessages(filename); printf("msgnumberstruct lenght: %d\n", msgNumbersStruct.lenght); - printf("0\n"); - printf("0.1\n"); struct rec userFilesStruct[1024]; - printf("1\n"); - //Send to client char posteingangMsg[1024]; sprintf(posteingangMsg, "\x1B[32mPOSTEINGANG Nachrichten: %d\n\n\n\n", msgNumbersStruct.lenght); @@ -507,14 +498,9 @@ int main(int argc, char **argv) for (int i = 0; i < msgNumbersStruct.lenght; i++) { - - printf("2.1&2.%d\n", i); char filename[1024]; - printf("2.3.%d\n", i); sprintf(filename, "%d", msgNumbersStruct.index[i]); - printf("2.4.%d\n", i); struct rec my_record_p = readFile(filename); - printf("2.5.%d\n", i); //Send to client printf("\n\nEINGANG -- Nachricht: %d Betreff: %s", i, my_record_p.betreff); sprintf(posteingangMsg, "\x1B[34mBetreff: %s\n", my_record_p.betreff); @@ -522,12 +508,8 @@ int main(int argc, char **argv) printf("Send result: %d\n", sendresult); userFilesStruct[i] = my_record_p; - printf("2.6.%d\n", i); } - printf("3\n"); - //postausgang - filename[1024]; strcpy(filename, "postausgang/"); strcat(filename, username); @@ -541,20 +523,13 @@ int main(int argc, char **argv) sendresult = send(new_socket, postausgangMsg, strlen(postausgangMsg), 0); printf("Send result: %d", sendresult); - printf("0\n"); - printf("0.1\n"); struct rec userFilesStructAusgang[1024]; - printf("1\n"); for (int i = 0; i < msgNumbersStructAusgang.lenght; i++) { - printf("2.1&2.%d\n", i); char filename[1024]; - printf("2.3.%d\n", i); sprintf(filename, "%d", msgNumbersStructAusgang.index[i]); - printf("2.4.%d\n", i); struct rec my_record_p = readFile(filename); - printf("2.5.%d\n", i); printf("\n\nAUSGANG -- Nachricht: %d Betreff: %s\n\n", i, my_record_p.betreff); //Send to client char postausgangMsg[1024]; @@ -563,12 +538,10 @@ int main(int argc, char **argv) printf("Send result: %d", sendresult); userFilesStructAusgang[i] = my_record_p; - printf("2.6.%d\n", i); } //Send to client sendresult = send(new_socket, "LISTREADSTOPNOW\n", strlen("LISTREADSTOPNOW\n"), 0); printf("Send result: %d", sendresult); - printf("3\n"); bufferString[0] = '\0'; buffer[0] = '\0'; fflush(stdout);