Gå til innhold

VB.NET Download kode Sockets async


Anbefalte innlegg

Hei!

 

Jeg har følgende kode:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
       tOut.Text = ""
       Dim EPIP As IPEndPoint = New IPEndPoint(Dns.GetHostEntry(tHost.Text).AddressList(0), 80)
       Dim Sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
       Try
           Sck.Connect(EPIP)
           If Sck.Connected = False Then MsgBox("ERROR:" & vbCrLf & "Could not connect.") : Exit Sub
           Sck.Send(ASCII.GetBytes("GET / HTTP/1.0" & vbCrLf & vbCrLf))
           Dim Buffer(1024) As Byte
           Dim ByteCount As Int16 = Sck.Receive(Buffer, Buffer.Length, 0)
           tOut.Text = ASCII.GetString(Buffer, 0, ByteCount)
           Do While ByteCount > 0
               ByteCount = Sck.Receive(Buffer, Buffer.Length, 0)
               tOut.Text &= ASCII.GetString(Buffer, 0, ByteCount)
           Loop
       Catch
           MsgBox(Err.Description)
       End Try
   End Sub

 

Denne funker fint på hele domener som -"www.ba.no", men hvis jeg prøver å laste en fil liksom inni selve domene. Altså link til en reportasje så får jeg feilmelding.

 

-"Kjenner ingen slik vert"

 

:dontgetit:

 

Noen ?

Lenke til kommentar
Videoannonse
Annonse

HTTP 1.0 takler ikke hostname. Og siten som ligger på www.ba.no != siten som ligger på 80.232.36.54.

 

Hvorfor bruker du ikke HTTP 1.1?

 

Hvorfor bruker du sockets til dette? WebRequest/WebResponse eller WebClient gjør jo dette mye enklere for deg.

Lenke til kommentar

Vel du kan jo prøve følgende

 

 

GET /path/to/page.html HTTP/1.1
Host: www.myhost.com

 

 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      tOut.Text = ""
      Dim EPIP As IPEndPoint = New IPEndPoint(Dns.GetHostEntry(tHost.Text).AddressList(0), 80)
      Dim Sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
      Try
          Sck.Connect(EPIP)
          If Sck.Connected = False Then MsgBox("ERROR:" & vbCrLf & "Could not connect.") : Exit Sub
          Sck.Send(ASCII.GetBytes("GET / HTTP/1.1" & vbCrLf & "Host: " & tHost.Text & vbCrLf & vbCrLf))
          Dim Buffer(1024) As Byte
          Dim ByteCount As Int16 = Sck.Receive(Buffer, Buffer.Length, 0)
          tOut.Text = ASCII.GetString(Buffer, 0, ByteCount)
          Do While ByteCount > 0
              ByteCount = Sck.Receive(Buffer, Buffer.Length, 0)
              tOut.Text &= ASCII.GetString(Buffer, 0, ByteCount)
          Loop
      Catch
          MsgBox(Err.Description)
      End Try
  End Sub

 

 

Ikke testet, men rent teoretisk.

Endret av alftore
Lenke til kommentar

alftore: Var vel ikke så mye forskjell fra innlegget mitt vel?

 

 

Uansett, tror feilen ligger i at han prøver å skrive full url inn i tHost.Text. Og Dns.GetHostEntry(tHost.Text) fungerer jo selvfølgelig ikke med katalog/filnavn... Derav feilmeldingen "Unknown host" ("Kjenner ingen slik vert" for de som ikke kan engelsk).

 

En annen ting er at koden han kom med ikke var async.

Bruk WebClient! Den har også OpenReadAsync metode slik at du slipper å gjøre dette selv...

Lenke til kommentar

Nei, jeg sa heller ikke at innlegget mitt var mye annerledes. Bare gav et eksempel på hvordan han kunne løse problemet.

 

Bruk av webclient er fint, men det er jo også fint å få litt forståelse hvordan sockets og http protokollen fungerer. Så skjønner du kanskje hva som skjer galt når webclient mot formodning en dag feiler.

 

Regner med at dette ikke er kode for noe proff program som skal ut i salg uansett. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...