Http Listener

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Http Listener

    Guten Abend.
    Ich würde gerne ein kleines Programm schreiben, welches bei bestimmter Adresseingabe im Browser reagiert und Daten an die Seite schickt.
    Vorerst. Ist das möglich ?
    Das Schicken ist kein Problem, doch beim Auslesen hapert es. Nach ein paar Nachforschungen hat sich herausgestellt, dass das ganze mit einem HTTPListener zu machen ist.
    msdn.microsoft.com/de-de/libra…tem.net.httplistener.aspx
    MSDN hat hierzu ein Beispiel. Jedoch blick ich da nicht ganz durch, was dieser Code macht. (Hab's nicht ausprobiert)
    Kann mir da jemand auf die Sprünge helfen ?
    Und wie genau muss ich diesen Code für mein Vorhaben verwenden ?

    Edit:
    Ich hab mal den Code ausprobiert.

    VB.NET-Quellcode

    1. ' This example requires the System and System.Net namespaces.
    2. Public Shared Sub SimpleListenerExample()
    3. If Not HttpListener.IsSupported Then
    4. Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
    5. Return
    6. End If
    7. ' Create a listener.
    8. Dim listener As New HttpListener()
    9. ' Add the prefixes.
    10. listener.Prefixes.Add("http://localhost/")
    11. listener.Start()
    12. Console.WriteLine("Listening...")
    13. ' Note: The GetContext method blocks while waiting for a request.
    14. Dim context As HttpListenerContext = listener.GetContext()
    15. Dim request As HttpListenerRequest = context.Request
    16. ' Obtain a response object.
    17. Dim response As HttpListenerResponse = context.Response
    18. ' Construct a response.
    19. Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    20. Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    21. ' Get a response stream and write the response to it.
    22. response.ContentLength64 = buffer.Length
    23. Dim output As System.IO.Stream = response.OutputStream
    24. output.Write(buffer, 0, buffer.Length)
    25. ' You must close the output stream.
    26. output.Close()
    27. listener.[Stop]()
    28. End Sub


    Fehler bei listener.Start() Zugriff verweigert. Das Programm wird als Admin gestartet.

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

    @Rinecamo
    Ja hab ich. Es läuft nichts auf Port 80.
    Komisch ...

    Edit: Was mir aufgefallen ist. Wenn ich das Programm starte wirft er den Fehler. Starte ich nun meinen Apache neu (xampp) kommt ein Fehler in xampp
    00:28:23 [Apache] Error: Apache shutdown unexpectedly.
    00:28:23 [Apache] This may be due to a blocked port, missing dependencies,
    00:28:23 [Apache] improper privileges, a crash, or a shutdown by another method.
    Bei Windows 8 hat man trotz Administratoraccount leider keine vollständigen Administratorenrechte und UAC lässt sich auch nicht vollständig deaktivieren.
    Entweder man aktiviert den Systemadministrator als Account, oder deaktiviert UAC in der Registry. Dazu dürftest du was bei Google finden. Ob das jetzt auf dein Fehler zurückzuführen ist, kann ich dir leider nicht sagen, aber man liest ja in fast jedem Ergebnis das mangelnde Rechte die Ursache sei.
    Dann bleibt nur noch, auch nach dem xampp Log zu urteilen, ein blockierter Port in Frage.
    Ich weiß nicht wie du deine Ports überprüft, aber ich würde die Finger von diesen Online Checkern lassen. Ich habe es gerade mal probiert, läuft Skype dann schlägt dein Code fehl, da Skype auf den Port zugreift. Online Tools zeigen mir an das Port 80 belegt ist (was auch stimmt), schließe ich Skype funktioniert dein Code, die online Tools melden aber durchgehend an das Port 80 belegt ist (was nicht mehr stimmt). In meiner VM hingegen melden sie trotz Skype an, dass Port 80 frei ist.

    Wie dem auch sei, ich möchte nicht an deinen Kompetenzen zweifeln. Doch zur Not einmal neustarten und Programm vor allem anderen debuggen. Ansonsten sind meine Ratschläge auch passé.
    @kinsi
    Danke ! Klappt nun

    Oh man. Ich habe einen blöden Fehler gemacht. Ich hatte es als WinForm und es nach meinen Versuchen nicht als Administrator ausgeführt.
    Es klappt nun. Also es wirft keinen Fehler wenn ich Port 100 überwache.

    Bei Port 80 klappt es nicht. (Weil ich xampp laufen habe ?)
    Wie kann ich denn nun testen ob das mit Port 100 klappt ? Was muss ich da in die Adresszeile eingeben ?

    Code:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict on
    2. Imports System.Net
    3. Module Module1
    4. Sub Main()
    5. SimpleListenerExample()
    6. End Sub
    7. ' This example requires the System and System.Net namespaces.
    8. Public Sub SimpleListenerExample()
    9. If Not HttpListener.IsSupported Then
    10. Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.")
    11. Return
    12. End If
    13. ' Create a listener.
    14. Dim listener As New HttpListener()
    15. ' Add the prefixes.
    16. listener.Prefixes.Add("http://*:100/")
    17. listener.Start()
    18. Console.WriteLine("Listening...")
    19. ' Note: The GetContext method blocks while waiting for a request.
    20. Dim context As HttpListenerContext = listener.GetContext()
    21. Dim request As HttpListenerRequest = context.Request
    22. ' Obtain a response object.
    23. Dim response As HttpListenerResponse = context.Response
    24. ' Construct a response.
    25. Dim responseString As String = "<HTML><BODY> Hello world!</BODY></HTML>"
    26. Dim buffer As Byte() = System.Text.Encoding.UTF8.GetBytes(responseString)
    27. ' Get a response stream and write the response to it.
    28. response.ContentLength64 = buffer.Length
    29. Dim output As System.IO.Stream = response.OutputStream
    30. output.Write(buffer, 0, buffer.Length)
    31. ' You must close the output stream.
    32. output.Close()
    33. listener.[Stop]()
    34. End Sub
    35. End Module