Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe 1 - snail
Kurze Frage zur Snail.
Wie soll der Benutzer die Mail senden können? Auch durch simple Eingabe von einem Punkt in der neuen Zeile (und dann newline natürlich)? oder kann/soll man es so implementieren, dass der Benutzer etwas anderes eingibt, bspw ein oder ->SEND ?
Der Benutzer tippt seinen Nachrichtentext vollständig ein und drückt dann Ctrl-D, um den Standardeingabekanal zu schließen. Die [m]snail[/m] sendet daraufhin den Punkt an den Server und wickelt den verbleibenden Rest der Kommunikation ab.
Man soll [m]snail[/m] auch folgendermaßen benutzen können:
Wie fange ich EOF rechtzeitig ab? Meine Eingabe wird im I/O buffer gepuffert und erst nach einem Enter durchläuft meine Schleife
Für jegliche Tipps wäre ich dankbar
Soweit ich von der Aufgabenstellung verstanden habe, müssen wir den Body der Mail einlesen bis einer EOF (STRG+D) in der Standardeingabe eingibt bzw. Ende einer Datei auftritt.
Ich habe es mit mehreren Funktionen versucht einzulesen bis EOF kommt. Aber ich bekomme das Problem, dass wenn ich EOF drücke, das Einlesen nciht sofort beendet wird, sondern erst nach dem 2. Mal EOF drücken. Bzw es wird rechtzeitig beendet ,wenn jemand Enter drückt.
Scheint so , als würde sich der Tastaturbuffer nur bei einem Enter leeren und erst dann wird meine Schleife durchlaufen.
Ah, jetzt versteh ich’s.
Das ist normales Verhalten deines Terminals und kein Problem mit deinem Programm! Wenn man sich in der Mitte einer Zeile befindet, muss man Ctrl-D zweimal drücken, um [m]stdin[/m] zu schließen. Normalerweise erwartet das Terminal, dass man erst Enter drückt und dann Ctrl-D - dann macht es den Kanal auch sofort dicht.
Hallo zusammen
Ich hätte auch mal eine Frage und zwar kommt bei mir, nachdem ich die MAIL FROM-Nachricht sende der Fehler “501 5.1.7 Bad sender address syntax” vom Server
Wenn ich mir aber die MAIL FROM-Nachricht ausgeben lasse, GENAU so kopiere und einfüge, wenn ich mit “nc” die Kommunikation simuliere dann scheint alles ok zu sein (“250 2.1.0 Ok”)
Ich wüsste nicht woran das liegen könnte, das ‘\r’ vor dem ‘\n’ habe ich auch nicht vergessen
Ich glaube, das ist ein Fall für die Rechnerübung.
Hier trotzdem ein paar Tipps von mir:
Wie sendest du denn die Anfragezeilen an den Server? Per [m]fprintf()[/m]? Oder baust du dir immer erst den String im Speicher zusammen und schickst ihn dann mit [m]write()[/m] [nicht empfehlenswert]? Kann es sein, dass du irgendwo versehentlich nicht-druckbare Zeichen wie z. B. [m]‘\0’[/m] mitschickst?
Meldet Valgrind irgendwelche Probleme?
Das ist mir schon klar
Ich meinte damit wie allgemein (deswegen plural bei subject) mit einem subject umgegangen werden soll, das aus mehreren Worten besteht.
Ich glaube ich bin hauptsächlich durch den exemplarischen Aufruf des Programms auf der Angabe:
verwirrt, weil ich dachte, dass ein subject immer in < > stehen müsste.
Zu [quote]
snail -s dies ist mein subject meine@email.de
^ ^
argv[0] … argv[argc-1]
[/quote]
hätte ich aber auch noch eine Frage
Wenn ich jetzt z.B. wie bei
meine Nachricht aus einer Textdatei holen will, ist dann nicht mailcontents.txt an der Stelle argv[argc-1]?
Nein mit „< mailcontents.txt“ wird „mitgeteilt“, dass die Eingabequelle für stdin in diesem Fall eine Pipe/Datei ist und die Eingabe nicht per Terminal erfolgt - das hat nix mit den Sachen in argv zu tun.
Edit: Trotzdem eine Frage: Muss das, was nach -s steht, denn nun beliebig lang sein können?
Ich hab jetzt mal die Version von mir abgegeben, bei der man als Betreff eingeben kann, was man will
Ich hab auch ein Problem mit dem MAIL FROM-statement.
ich bau mir das mit strcat so zusammen, wie es auf dem Aufgabenblatt steht (also auch mit den spitzen Klammern) und
füge dann noch \r\n an. Also wenn ich mir noch ein ‘\0’ dazuklatsche und ausgeben lasse, sieht’s aus wie auf dem Aufgabenblatt.
Allerdings bekomme ich vom server die Meldung “502 5.5.2 Error: command not recognized”, wenn ich’s per fputs sende.
Ich habs auch mit fprintf probiert mit demselben ergebnis.
Hat jemand irgendeine Idee, was ich probieren könnte? Ich bin übrigens per ssh auf dem Uni-Rechner. Weiß nicht, ob es
was damit zu tun haben könnte.
Betreffs, die aus mehreren Wörtern bestehen, sollen als ein Argument an die [m]snail[/m] übergeben werden - deswegen das Setzen in Anführungszeichen beim Aufruf, denn so nimmt die Shell keine Zerhäckselung in mehrere Argumente vor.
Der Betreff ist immer entweder leer oder steht in [m]argv[2][/m].
Die Empfängeradresse steht immer entweder in [m]argv[1][/m] oder in [m]argv[3][/m].