TServerSocket, muss Verbindung schließen zum senden?



  • hm, habe die Zeichen angefügt, das Ergebnis bleibt aber das selbe. Ohne Close(); wird nichts geschickt.

    Folgendes sollte zur probe mal geschickt werden:

    stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
      stl_text->Add("\r\n\r\n");
    
      Socket->SendText(stl_text->Text);
    

    [edit]: die wahl des ports ist doch egal, sofern er nicht von einem anderem programm benutzt wird oder?



  • Ja, das ist egal... Aber eine Frage: Wo versendest du den Rest des HTTP?

    -junix



  • also einen HTTP header? der muss doch an den anfang gesetzt werden oder?



  • äh, ja?



  • also wenn ich mir den Socket->ReceiveText() so anschaue, kann man das doch als HTTP Header nehmen oder sehe ich das wieder mal falsch?

    aber dies führt auch nicht zum gewünschten erfolg.

    hier nochmal der code (Der im ClientRead-Ereignis steht):

    AnsiString as_rt=Socket->ReceiveText();
    stl_text->Add(as_rt);
      stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
    
      Socket->SendText(stl_text->Text);
    

    Der ReceiveText hat ja abschließen das \r\n\r\n brauch das dann ja nicht mehr mit hinzufügen.



  • ThorstenSteinberg schrieb:

    also wenn ich mir den Socket->ReceiveText() so anschaue, kann man das doch als HTTP Header nehmen oder sehe ich das wieder mal falsch?

    Ja.
    Das siehst du falsch.

    ThorstenSteinberg schrieb:

    aber dies führt auch nicht zum gewünschten erfolg.

    Genau.

    ThorstenSteinberg schrieb:

    Der ReceiveText hat ja abschließen das \r\n\r\n brauch das dann ja nicht mehr mit hinzufügen.

    ...du hast nciht wirklich Erfahrung mit Protokollen und Kommunikation oder?

    Hast du schon mal die RFC zum Thema HTTP gelesen?
    Schau mal hier nach...



  • ahh, stimmt da war was mit denn Codes 200 404 etc. ich kann mich wage drann errinnern. Danke für den Link, werde ihn mir morgen erst komplett durchlesen, ist zu viel für heute abend.

    Also wahrscheinlich melde ich mich morgen hier zu nochmal.

    Danke.

    Gruß
    Thorsten



  • soo, habe nun mal wieder folgendes versucht:

    stl_text->Add("HTTP/1.1 200 OK");
      stl_text->Add("Date: Mon, 07 Nov 2005 20:20:32 GMT");
      stl_text->Add("Server: WebServer");
      stl_text->Add("Connection: Keep-Alive");
      stl_text->Add("Content-Type: text/html");
      stl_text->Add("\r\n\r\n");
      stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
    
      Socket->SendText(stl_text->Text);
    

    Aber auch dieser Versuch klappte nicht 😞 Ich weiß langsam echt nicht mehr weiter...



  • da haste aber ganz schön viele \r\n's vergessen.



  • wenn das so:

    stl_text->Add("HTTP/1.1 200 OK\r\n");
      stl_text->Add("Date: Mon, 07 Nov 2005 20:20:32 GMT\r\n");
      stl_text->Add("Server: WebServer\r\n");
      stl_text->Add("Connection: Keep-Alive\r\n");
      stl_text->Add("Content-Type: text/html\r\n");
      stl_text->Add("\r\n\r\n");
      stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
    

    gemeint war, dann klappet auch nicht ...



  • jetzt hast du einmal zu viel am schluß, aber das wirds wohl nicht sein.



  • ne, das war es leider auch nicht



  • Hast du dir die seite durchgelesen? Dann kann ich mir nicht erklären wei du zu dem Ergebnis kommst?



  • ich habe mir nun nochmal einen beispiel header von denen angeschaut der so aussieht:

    HTTP/1.0 200 OK
    Date: Fri, 31 Dec 1999 23:59:59 GMT
    Content-Type: text/html
    Content-Length: 1354

    so und habe meinen nun wie folgt abgeändert:

    stl_text->Add("HTTP/1.1 200 OK\r\n");
      stl_text->Add("Date: Mon, 07 Nov 2005 20:20:32 GMT\r\n");
      stl_text->Add("Content-Type: text/html\r\n");
      stl_text->Add("Content-Length: 62\r\n");
      stl_text->Add("\r\n");
      stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
    

    aber funktioniert immer noch nicht. ich weiß jetzt echt nicht mehr weiter 😞 😕



  • Sag mal, probierst du einfach nur rum, oder gehst du gezielt vor?

    Beantworte mir bitte folgende Fragen:
    1. Was macht die Add-Methode von TStringList genau?
    2. Wozu ist \r\n da?
    3. Wie sieht der zu versendete String aus?



  • Also Add() fügt ja immer einen String in die Liste hinzu. Durch beobachten meine ich, dass nach jedem Add bzw. nach dem String "automatisch" ein \r\n hinzugefügt wird. Also meines erachtens nach bräuchte ich dann oben die ganzen \r\n eigentlich garnicht, nur am schluß einmal \r\n.

    Mit dem Steuerzeichen \r "spingt" der Courser zum Anfang der aktuellen Zeilen und \n "springt" der Courser zum Anfang der nächsten Zeile, oder anders gesagt, \n fügt eine neue zeile hinzu.

    hmm...



  • ich werd bescheuert 😃

    habe nun folgendes dann daraus geschlossen und ausprobiert:

    stl_text->Add("HTTP/1.1 200 OK");
      stl_text->Add("Date: Mon, 07 Nov 2005 20:20:32 GMT");
      stl_text->Add("Content-Type: text/html");
      stl_text->Add("Content-Length: 62");
      stl_text->Add("\r\n");
      stl_text->Add("<html><head><title>hmm</title></head><body>hallo</body></html>");
    

    und es funktioniert 😉

    danke...



  • Hängt Add wirklich \r\n dran oder nur \n?



  • ich meine \r\n es funktioniert nun aufjedenfall...



  • ThorstenSteinberg schrieb:

    ich meine \r\n

    Meinen tuen narren...

    ThorstenSteinberg schrieb:

    es funktioniert nun aufjedenfall...

    Das heisst nicht, das es richtig ist!


Anmelden zum Antworten