Avatar billede agerled Nybegynder
07. juni 2005 - 09:59 Der er 14 kommentarer og
1 løsning

Winform app der behandler httpkald

Hej

Kan man lave en app der "lytter" efter ingående http-requests og behandler dem og sender svar retur....?
Avatar billede arne_v Ekspert
07. juni 2005 - 10:06 #1
Ja.

.NET 1.1 : lav en TcpListener som lytter på port 80 og fortolker HTTP requests

.NET 2.0 : indbygget support - se min artikel om .NET 2.0 og C# 2.0
Avatar billede agerled Nybegynder
07. juni 2005 - 10:12 #2
Kanon. Har du et eksempel med 1.1 og og hvordan jeg behandler variablerne. altså f.eks ved http://minserver.dk/test.asp?variabel1&variabel2
Avatar billede arne_v Ekspert
07. juni 2005 - 10:17 #3
nej men det er ikke svært

TcpListener på port 80
Accept giver en TcpClient
lav en StreamReader udfra TcpClient
læs en linie

Ovenstående URL bliver sendt som:

GET /test.asp?variabel1&variabel2 HTTP/1.1
diverse andre heeadere
tom linie
Avatar billede agerled Nybegynder
07. juni 2005 - 10:23 #4
ok. Jeg må lige prøve så..
Avatar billede agerled Nybegynder
07. juni 2005 - 10:47 #5
Hmmm kan ikke rigtigt finde et eksempel jeg forstår. Er der nogen der ligger inde med et?
Avatar billede arne_v Ekspert
07. juni 2005 - 12:21 #6
eksempel på super simpel server:

Imports System
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

Public Class HttpServer
    Public Shared Sub Main(ByVal args As String())
        Dim server As TcpListener = New TcpListener(IPAddress.Any, 80)
        server.Start
        While True
            Try
                Dim client As TcpClient = server.AcceptTcpClient
                Dim rdr As StreamReader = New StreamReader(client.GetStream)
                Dim wrt As StreamWriter = New StreamWriter(client.GetStream)
                Dim request As String = rdr.ReadLine
                Dim path As String = request.Split(" ".ToCharArray)(1)
                Dim line As String
                line = rdr.ReadLine
                While line <> ""
                    line = rdr.ReadLine
                End While
                wrt.WriteLine("HTTP/1.1 200 OK")
                wrt.WriteLine("Content-Type: text/plain")
                wrt.WriteLine
                wrt.WriteLine("Du bad om " + path)
                wrt.Flush
                rdr.Close
                wrt.Close
                client.Close
            Catch e As Exception
                Console.WriteLine(e)
            End Try
        End While
        server.Stop
    End Sub
End Class
Avatar billede agerled Nybegynder
07. juni 2005 - 12:37 #7
takker. har lige prøvet at køre den men får denn fejl:
Normalt må en socket-adresse (protokol/netværksadresse/port) kun bruges én gang

ved Server.start()
Avatar billede arne_v Ekspert
07. juni 2005 - 13:35 #8
det lyder som om din IIS kører på port 80 ...

enten må du stoppe den elle rvælge en anden port til dit program
Avatar billede agerled Nybegynder
09. juni 2005 - 09:49 #9
ja nu virker det tror jeg, men hvorfor bliver min form ikke synlig...?
Avatar billede arne_v Ekspert
09. juni 2005 - 22:24 #10
hvis det er en win form app skal du huske at lave accept loopet i en seperat
tråd og ikke i constructor eller event
Avatar billede arne_v Ekspert
13. juni 2005 - 22:01 #11
OK ?
Avatar billede agerled Nybegynder
20. september 2005 - 17:56 #12
undskyld den sene respons..

Hvordan laver jeg accept loopet i en seperat tråd?
Avatar billede arne_v Ekspert
23. september 2005 - 23:56 #13
putter den i en metode og starter en tråd med den metode

call (New Thread(AddressOf dinmetode)).Start
Avatar billede agerled Nybegynder
05. maj 2006 - 19:19 #14
Jeg kan ikke få den module1.vb til at virke i en winapp. Kan en eller anden vise mig hvordan?
Avatar billede agerled Nybegynder
05. maj 2006 - 19:19 #15
Hov glem den sidte kommentar..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester