Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[VB.NET] Hele simpele webserver in Windows-form-applicatie

Pagina: 1
Acties:

Vraag


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 09:40
Beste allemaal,

Graag zou ik in mijn (bestaande) Windows Form Applicatie een simpele webserver maken zodat uiteindelijk de code die nu achter "button1" zit (en je dus alleen op de PC waar je de Form-applicatie draait kunt starten) ook via een andere computer in het netwerk gestart kan worden door middel van het browsen naar een bepaalde URL.

Ik kwam tijdens mijn zoektocht dit stukje code tegen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Imports System.Net
Imports System.Globalization

Module HttpListener

    Sub Main()
        Dim prefixes(0) As String
        prefixes(0) = "http://*:8080/HttpListener/"
        ProcessRequests(prefixes)
    End Sub

    Private Sub ProcessRequests(ByVal prefixes() As String)
        If Not System.Net.HttpListener.IsSupported Then
            Console.WriteLine( _
                "Windows XP SP2, Server 2003, or higher is required to " & _
                "use the HttpListener class.")
            Exit Sub
        End If

        ' URI prefixes are required,
        If prefixes Is Nothing OrElse prefixes.Length = 0 Then
            Throw New ArgumentException("prefixes")
        End If

        ' Create a listener and add the prefixes.
        Dim listener As System.Net.HttpListener = _
            New System.Net.HttpListener()
        For Each s As String In prefixes
            listener.Prefixes.Add(s)
        Next

        Try
            ' Start the listener to begin listening for requests.
            listener.Start()
            Console.WriteLine("Listening...")

            ' Set the number of requests this application will handle.
            Dim numRequestsToBeHandled As Integer = 10

            For i As Integer = 0 To numRequestsToBeHandled
                Dim response As HttpListenerResponse = Nothing
                Try
                    ' Note: GetContext blocks while waiting for a request.
                    Dim context As HttpListenerContext = listener.GetContext()

                    ' Create the response.
                    response = context.Response
                    Dim responseString As String = _
                        "<HTML><BODY>The time is currently " & _
                        DateTime.Now.ToString( _
                        DateTimeFormatInfo.CurrentInfo) & _
                        "</BODY></HTML>"
                    Dim buffer() As Byte = _
                        System.Text.Encoding.UTF8.GetBytes(responseString)
                    response.ContentLength64 = buffer.Length
                    Dim output As System.IO.Stream = response.OutputStream
                    output.Write(buffer, 0, buffer.Length)

                Catch ex As HttpListenerException
                    Console.WriteLine(ex.Message)
                Finally
                    If response IsNot Nothing Then
                        response.Close()
                    End If
                End Try
            Next
        Catch ex As HttpListenerException
            Console.WriteLine(ex.Message)
        Finally
            ' Stop listening for requests.
            listener.Close()
            Console.WriteLine("Done Listening...")
        End Try
    End Sub
End Module


bron: https://stackoverflow.com...-posts-simple-http-server

En dat werkt in principe al vrij aardig :)
Maar er zijn 2 "probleempjes"

1. In m'n Form-app komt nu steeds de melding *reageert niet*
2. Nu werkt de webserver zo, dat als ik naar http://192.168.1.212:8080/HttpListener/ ga, de tijd wordt weergegeven in de browser:
The time is currently 27-6-2020 14:22:12
Maar wat ik wil is dat als iemand naar die URL gaat, met daar bijvoorbeeld achter "?=test" dat er bijvoorbeeld een MsgBox met "test" erin verschijnt in de Form-App. (dit dus om te "bewijzen" dat ik dynamische strings kan doorsturen zodat ik daar later vanalles mee kan doen in de Form-App).


Hoe los ik puntje 1 op? En hoe maak ik puntje 2?

(ik denk zelf dat het "probleem" in punt 1 ontstaat omdat ik nu een Form gebruik, terwijl in het voorbeeld een Module wordt gebruikt zonder "Form" waar iets op kan gaan vasthangen)

Wie heeft er raad? _/-\o_

Beste antwoord (via Atmoz op 27-06-2020 18:37)


  • Daos
  • Registratie: oktober 2004
  • Niet online
Atmoz schreef op zaterdag 27 juni 2020 @ 18:07:
Ik kan "GetContext" helemaal nergens in de code vinden O-)
Bedoel je iets anders toevallig?
Ik zie het hier:

Visual Basic .NET:
43
44
' Note: GetContext blocks while waiting for a request.
Dim context As HttpListenerContext = listener.GetContext()


Volgens mij kan je dat dus vervangen door (moet je wel je functie Async maken en bij aanroep ook Await gebruiken; enzovoorts):

Visual Basic .NET:
43
Dim context As HttpListenerContext = Await listener.GetContextAsync()

Alle reacties


Acties:
  • +1Henk 'm!

  • Daos
  • Registratie: oktober 2004
  • Niet online
1 komt vrij zeker doordat je hem start in de ui-thread en hij wacht op de GetContext. Je kan proberen het op een andere thread uit te voeren met Task.Run: https://docs.microsoft.co...run?view=netframework-4.8 (rechtsboven VB kiezen)
edit:
Of misschien makkelijker/mooier GetContextAsync gebruiken: https://docs.microsoft.co...ync?view=netframework-4.8

2 context.Request geeft informatie over je aanroep. Daarin kan je zo te lezen in de QueryString je parameters vinden: https://docs.microsoft.co...ing?view=netframework-4.8

[Voor 14% gewijzigd door Daos op 27-06-2020 17:29]


  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 09:40
Daos schreef op zaterdag 27 juni 2020 @ 17:13:
1 komt vrij zeker doordat je hem start in de ui-thread en hij wacht op de GetContext. Je kan proberen het op een andere thread uit te voeren met Task.Run: https://docs.microsoft.co...run?view=netframework-4.8 (rechtsboven VB kiezen)
edit:
Of misschien makkelijker/mooier GetContextAsync gebruiken: https://docs.microsoft.co...ync?view=netframework-4.8

2 context.Request geeft informatie over je aanroep. Daarin kan je zo te lezen in de QueryString je parameters vinden: https://docs.microsoft.co...ing?view=netframework-4.8
Thanks voor je reactie!

Ik kan "GetContext" helemaal nergens in de code vinden O-)
Bedoel je iets anders toevallig?

Daardoor kan ik puntje 2 ook niet proberen :P

Acties:
  • Beste antwoord
  • +1Henk 'm!

  • Daos
  • Registratie: oktober 2004
  • Niet online
Atmoz schreef op zaterdag 27 juni 2020 @ 18:07:
Ik kan "GetContext" helemaal nergens in de code vinden O-)
Bedoel je iets anders toevallig?
Ik zie het hier:

Visual Basic .NET:
43
44
' Note: GetContext blocks while waiting for a request.
Dim context As HttpListenerContext = listener.GetContext()


Volgens mij kan je dat dus vervangen door (moet je wel je functie Async maken en bij aanroep ook Await gebruiken; enzovoorts):

Visual Basic .NET:
43
Dim context As HttpListenerContext = Await listener.GetContextAsync()

  • Atmoz
  • Registratie: juli 2001
  • Laatst online: 09:40
YES! Het werkt :)
Sorry, was in de verkeerde applicatie bezig...
Had nog even snel een test-App gemaakt, en daar kon ik dat "context" niet in vinden...
Erg slordig. Mijn excuses!

Ontzettend bedankt voor de hulp. Echt gaaf dat 't werkt _/-\o_


Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True