Avatar billede madssch Nybegynder
15. marts 2006 - 09:11 Der er 11 kommentarer og
1 løsning

Domain available?

Hej Eksperter!

Jeg har en funktion, som hvert 10. sekund downloader en fil fra et domæne.

I denne funktion ønsker jeg at tjekke, om filen overhovedet kan downloades - altså om domænenavnet kan fanges.

Jeg har følgende:

    Public Sub Download()

        ' Denne Sub udfører selve download processen.
        ' Først aflæses der, hvornår filen sidst er ændret (DateLastModified).
        ' Herefter udføres selve download processen
        ' "DateLastModified" sendes til Sub'en "FillInformations".

        Dim WebURL As String = "http://www.domain.dk/"
        Dim FileName As String = "lastshoporder_web.txt"
        Dim Request As HttpWebRequest = CType(WebRequest.Create(WebURL & FileName), HttpWebRequest)

        Dim Response As HttpWebResponse = CType(Request.GetResponse, HttpWebResponse)
        Dim DateLastModified As DateTime = Response.LastModified
        Dim TotalFileSize As Long = Response.ContentLength
        Dim InStream As Stream = Response.GetResponseStream
        Dim OutStream As Stream = New FileStream(FileName, FileMode.Create, FileAccess.Write)
        Dim b(1000) As Byte
        Dim n As Integer

        n = InStream.Read(b, 0, b.Length)

        While (n > 0)

            OutStream.Write(b, 0, n)
            n = InStream.Read(b, 0, b.Length)

        End While

        OutStream.Close()
        InStream.Close()
        Response.Close()

        FillInformations(DateLastModified)

    End Sub

Jeg har forsøgt mig med både Request.HaveResponse, men den returnerer False uanset hvad...

Hvad gør jeg forkert?
Avatar billede bernhof Nybegynder
15. marts 2006 - 10:17 #1
Du kan jo først og fremmest prøve at ping'e domænet. Dette sikrer dog ikke, at filen er tilgængelig, men det bekræfter dog, at domænet er:

    Dim lPing As New Ping
    Dim lReply As PingReply
    Dim lTimeout As Int32 = 2000
    lReply = lPing.Send("www.domain.dk", lTimeout)
    If lReply.Status = IPStatus.Success Then
      'domain ok
      MessageBox.Show("Domænet er tilgængeligt")
    Else
      'der skete en fejl
      MessageBox.Show(lReply.Status.ToString)
    End If

Og husk lige følgende imports øverst i koden:

    Imports System.Net.NetworkInformation
Avatar billede madssch Nybegynder
15. marts 2006 - 10:26 #2
Selve Ping-metoden tror jeg er den helt rigtige løsning, for den returnerer TimeOut hvis serveren er nede men også hvis brugerens internet forbindelse er røget. Ikke?

Nå, men desværre får jeg timeout på domænet, selvom jeg ved det kører..?

Har prøvet at ændre til: lReply = lPing.Send("http://www.domain.dk", lTimeout) - men så får jeg en fejl.

(Har selvfølgelig ændret www.domain.dk)  :)
Avatar billede madssch Nybegynder
15. marts 2006 - 11:12 #3
Jeg har nu fundet ud af, at serveren jeg forsøger at ping'e ikke tillader ping-aktioner.

Kan man måske i stedet lave en DNS Lookup?
Avatar billede madssch Nybegynder
15. marts 2006 - 11:25 #4
Jeg har i den forbindelse prøvet følgende:

Dns.GetHostAddresses("domain.dk")

Men her får jeg at vide, at "value of type '1-dimensional array of System.Net.IPAddress' cannot be converted to 'String'"..?
Avatar billede madssch Nybegynder
15. marts 2006 - 11:29 #5
Laver jeg til gengæld følgende:

Dim HostAddress As String = Dns.GetHostAddresses("domain.dk").ToString()
MessageBox.Show(HostAddress)

Returnerer den: System.Net.IPAddress[]

Men er det korrekt..?
Avatar billede bernhof Nybegynder
15. marts 2006 - 11:32 #6
Du er inde på noget af det rigtige. Prøv dette istedet:

    Try
      Net.Dns.GetHostEntry(txtHost.Text)
      MessageBox.Show("domænet er tilgængeligt")
    Catch ex As Exception
      MessageBox.Show("domænet er ikke tilgængeligt: " & ex.Message)
    End Try
Avatar billede bernhof Nybegynder
15. marts 2006 - 11:35 #7
GetHostAddresses returnerer et array af IPAddress, og hvis du kalder ToString på et array, retureres blot typens navn, som i dette tilfælde er "System.Net.IPAddress[]"
Avatar billede madssch Nybegynder
15. marts 2006 - 11:36 #8
Sorry, men hvor/hvordan angiver jeg domænet?
Avatar billede madssch Nybegynder
15. marts 2006 - 11:38 #9
Kunne jeg så ikke alternativt definere variablen som et array og spørge på længden af array'et?
Avatar billede bernhof Nybegynder
15. marts 2006 - 11:41 #10
Min fejl, der skulle selvfølgelig stå "www.domain.dk" istedet for txtHost.Text i linie nr. 2.

Mht. at tjekke længden på array'et, som returneres af GetHostAddresses, så er det ikke en brugbar løsning, da GetHostAddresses kaster en exception, hvis domainet ikke blev fundet. GetHostEntry gør det samme.
Avatar billede madssch Nybegynder
15. marts 2006 - 11:55 #11
Lige præcis!

Takker!  ;-)
Avatar billede bernhof Nybegynder
15. marts 2006 - 11:58 #12
:-)
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