HTTP Server

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von rafael9707s.

    HTTP Server

    Ich hab ein Problem bei TCP, ich möchte mit Firefox oder ein anderen Browser kommunizieren, also ich hab ein HTTP Server erstellt wo sich z.B Firefox eine HTML Datei runderlädt, ich frage mich jetzt nur wie man so was genau macht, weil ich weiss ned so genau was sich ein HTTP Server und ein Browser sich gegenseitig schicken..

    Also ich hab Ports freigeschaltet und so was, und Apache oder ein anderen Web Server brauch ich nicht.. (weil ich was spezelles einbauen will)

    Weiss jemand wie man so was macht?

    MFG Rafael
    Nu musst dem Browser einfach nur einen Header und dann den HTML Code schicken.
    Dann kannst du natürlich noch Dateipfade und Dateiangaben interpretieren, um dann die angefragte Datei zu übermitteln.

    Am einfachsten kann man das Prinzip am Arduino Webserver Sketch verstehen, und durch die gute Auskommentierung noch besser:

    C-Quellcode

    1. #include <SPI.h>
    2. #include <Ethernet.h>
    3. // Enter a MAC address and IP address for your controller below.
    4. // The IP address will be dependent on your local network:
    5. byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
    6. byte ip[] = { 192,168,1, 177 };
    7. // Initialize the Ethernet server library
    8. // with the IP address and port you want to use
    9. // (port 80 is default for HTTP):
    10. Server server(80);
    11. void setup()
    12. {
    13. // start the Ethernet connection and the server:
    14. Ethernet.begin(mac, ip);
    15. server.begin();
    16. }
    17. void loop()
    18. {
    19. // listen for incoming clients
    20. Client client = server.available();
    21. if (client) {
    22. // an http request ends with a blank line
    23. boolean currentLineIsBlank = true;
    24. while (client.connected()) {
    25. if (client.available()) {
    26. char c = client.read();
    27. // if you've gotten to the end of the line (received a newline
    28. // character) and the line is blank, the http request has ended,
    29. // so you can send a reply
    30. if (c == '\n' && currentLineIsBlank) {
    31. // send a standard http response header
    32. client.println("HTTP/1.1 200 OK");
    33. client.println("Content-Type: text/html");
    34. client.println();
    35. // output the value of each analog input pin
    36. for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
    37. client.print("analog input ");
    38. client.print(analogChannel);
    39. client.print(" is ");
    40. client.print(analogRead(analogChannel));
    41. client.println("<br />");
    42. }
    43. break;
    44. }
    45. if (c == '\n') {
    46. // you're starting a new line
    47. currentLineIsBlank = true;
    48. }
    49. else if (c != '\r') {
    50. // you've gotten a character on the current line
    51. currentLineIsBlank = false;
    52. }
    53. }
    54. }
    55. // give the web browser time to receive the data
    56. delay(1);
    57. // close the connection:
    58. client.stop();
    59. }
    60. }


    Mit dem Code kann man bei VB.net überhaupt nichts anfangen, weil es im .NET Framework keine ethernet Library gibt, aber das macht nichts, weil man das mit VB.net auch einfach realisieren kann.
    Wie steht in diesem Tutorial, nur eben, das du da erst HTTP einbauen musst:
    [VB.NET] Multiserver (TCP)
    Wie ein Header genau aussieht schauste dir am besten mit dem Firefox AddOn Live Header an. Du schaltest ihn ein, rufst eine EINFACHE Html Seite auf, wo keine weiteren Bilder oder Styling Dateien geladen werden. Dann siehst du was der Browser an den Webserver schickt und was der Webserver zurück an den browser schickt. Diesen Header analysierst du mal, alle Eigenschaften die nicht kennst googlest du nach, damit du verstehst wozu die mitgesendet werden.

    Portfreigabe brauchst du nicht, zumindest nicht wenn es bei dir lokal oder im Netzwerk ausprobierst.

    In .NET ist das einfach zu realisieren, einfach ein TCP Listener auf eine eingehende Verbindung auf Port 80 warten, den Header vom Browser ggf. auswerten und in den nun entstandenen TCP Stream einfach die Strings reinschreiben, flushen und Stream schließen. Schon zeigt der Browser die Datei an.
    So wie geht es jetzt weiter?

    VB.NET-Quellcode

    1. If Client.Chatter = "GET / HTTP/1.1" Then
    2. While Client.StreamR.Peek > -1
    3. Console.WriteLine(Client.StreamR.ReadLine)
    4. End While
    5. Client.StreamW.WriteLine("HTTP/1.1 200 OK")
    6. Client.StreamW.WriteLine("Server: Germany Chat (Win32)")
    7. Client.StreamW.WriteLine("Keep-Alive: timeout=5, max=100")
    8. Client.StreamW.WriteLine("Connection: Keep-Alive")
    9. Client.StreamW.WriteLine("Content-Type: text/html")
    10. Client.StreamW.WriteLine("")
    11. Client.StreamW.WriteLine("Dokument kam hier")
    12. Client.StreamW.Flush()
    13. Client1.Close()
    14. End If


    EDIT: Hab schon geschafft bissle gc-s.dyndns.org:9501/, aber noch ne Frage, wie sende ich eine EXE Datei oder ne favicon.ico an Browser?
    Dateien
    • liveheader.txt

      (647 Byte, 126 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „rafael9707s“ ()

    Client.StreamW.WriteLine("Connection: Keep-Alive")
    Client1.Close()
    Beides irgendwie ein Widerspruch...


    Wie soll die Verbindung aufrecht erhalten werden wenn du die Verbindung am Ende beendest?


    Und um Binärdateien zu verschicken, solltest du einen BinaryReader verwenden und die Daten dann auch binär in den TCP-Stream schicken.


    Sowas habe ich auch mal gemacht:
    [Release] µServe 0.1 - Webserver mit Passwortschutz


    Wenn du willst kannst auch meine Lib dafür verwenden, hat aber nur GET-Unterstützung

    [Beta] WebServer-Library for .NET
    ja, das tu ich ja, aber die datei wurde ja schon hochgeladen, also bedeutet ich breche erst ma ab wenn die fertig is
    funktioniert auch bei mein chat so wenn ich jemand kicke und kann auch gc-s.dyndns.org:9501/serverlog auch einwandfrei aufrufen

    EDIT: hab das mit den favicon und datei senden auch schon geschafft, da kann man das favicon sehen gc-s.dyndns.org:9501

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „rafael9707s“ ()