vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Existiert die entfernte Datei? 
Autor: WaldiMaywood
Datum: 02.07.04 00:04

>> Z.B. wenn 5 Sekunden keine Antwort vom Server kam, dann FALSE zurückgeben.
Oder hat jemand sonstige Vorschläge?

Du könntest ein Ping mit einer timeout Angabe ausführen. Hier ein Beispiel:
Imports System
Imports System.Web
Imports System.Net 
Imports System.Collections 
Imports System.Net.Sockets 
Imports System.Runtime.Remoting.Channels.Http
Public Class Main
	Public Shared Sub Main()
		Dim res As Boolean
		Dim host As String = "vbarchiv.net"
		Dim url as String = "http://" + host + "/home/willkommen.php"
		Dim pingRes As Boolean = Ping.Ping(host, 1000) Or Ping.Ping(host, 1000) '// 
		If pingRes Then
			res = WebFileExists(url)
		End If
		Console.WriteLine ("URL: " + url)
		Console.WriteLine ("Ping Result: " + pingRes.ToString())
		Console.WriteLine ("FileExists Result: " + res.ToString())
	End Sub
	Public Shared Function WebFileExists(ByVal URL As String) As Boolean
        Try
            Dim sBuffer As String
            Dim oRequest As WebRequest = WebRequest.Create(URL)
            oRequest.Method = "GET"
            Dim oResponse As WebResponse = oRequest.GetResponse()
            Dim oStream As New System.IO.StreamReader( _
              oResponse.GetResponseStream())
            sBuffer = oStream.ReadLine()
            oStream.Close()
            oResponse.Close()
            Return (sBuffer.Length = 0) 
        Catch e As Net.WebException
            Return False
        End Try
    End Function
    Public Class ping
	    Public Class RequestState
	        Public host As IPHostEntry
	        Public Sub New()
	            host = Nothing
	        End Sub 
	    End Class 
        Private Shared Sub RespCallback(ar As IAsyncResult)
        Try
            Dim tempRequestState As RequestState = CType(ar.AsyncState, _
              RequestState)
            tempRequestState.host = Dns.EndResolve(ar)
            Catch e As ArgumentNullException
   				Console.WriteLine (e.Message)
            Catch e As Exception
   				Console.WriteLine (e.Message)
        End Try
    	End Sub
		Public Shared Function Ping(ByVal host As String, ByVal timeout As Integer) _
  As Boolean
			Dim myRequestState As RequestState
			Dim asyncResult As IAsyncResult 
		   	myRequestState = New RequestState()
		    asyncResult = CType(Dns.BeginResolve(host, AddressOf RespCallback, _
  myRequestState),IAsyncResult)
	        While asyncResult.IsCompleted <> True
		    End While
		    If myRequestState.host Is Nothing Then Return 0
			Dim ip As IPAddress = myRequestState.host.AddressList(0)
			Dim ipEndPoint As IPEndPoint = New IPEndPoint (ip, 7)
			Dim socket As Socket = New Socket (AddressFamily.InterNetwork, _
  SocketType.Raw, ProtocolType.Icmp)
			Dim icmpPacket As Byte() =  {8, 0, 247, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _
0, 0}
			Dim result As Integer = socket.SendTo(icmpPacket, icmpPacket.Length, _
SocketFlags.None, ipEndPoint)
			Dim receivedData As ArrayList = New ArrayList 
			receivedData.Add(socket)
			Socket.Select(receivedData, Nothing, Nothing, timeout * 1000)
			Dim receiveICMPPacket() As Byte = New Byte(200){}
			Dim bytes As Integer = 0
			If receivedData.Count > 0 Then
				bytes = socket.Receive(receiveICMPPacket, receiveICMPPacket.Length, _
  SocketFlags.None)
				Return getICMPChecksum(receiveICMPPacket) = 0 
			Else
				Return False
			End If
		End Function
		Private Shared Function getICMPChecksum(ByVal icmpP() As Byte) As System.Int32
		Try
			Dim buffer As Byte()
			If (icmpP.Length Mod 2) > 0 Then
			    buffer = New Byte(icmpP.Length + 1){}
				icmpP.CopyTo(buffer, 0)
				buffer(buffer.Length - 1) = 0
			Else
				buffer = New Byte(icmpP.Length){}
				icmpP.CopyTo(buffer, 0)
			End If
			Dim checksum As Integer = 0
			For i As Integer = 0 To buffer.Length - 2 Step 2
				Dim firstByte As Byte = buffer(i + 1)
				Dim secondByte As Byte = buffer(i)
				Dim word As System.Int32 = Cint(secondByte)
				word = CType(((word << 8) + firstByte), System.Int32)
				checksum += word
			Next
			checksum = (checksum >> 16) + (checksum And 65535)
			checksum += (checksum >> 16)
			Return CType((Not checksum And 65535), System.Int32)
		Catch Ex As Exception 
				Console.WriteLine(ex.ToString())
				Return 0
		End Try
		End Function
	End Class 
End Class
(Sollte funzen)

Der Ping (eigentlich C#) Code ist aus dem "DotNet" Magazin, falls es dich interessiert.

Steve
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Existiert die entfernte Datei?1.567IsoLizer27.06.04 20:55
Re: Existiert die entfernte Datei?1.249Dartrax27.06.04 21:42
Re: Existiert die entfernte Datei?1.091IsoLizer27.06.04 22:37
Re: Existiert die entfernte Datei?1.158Dartrax27.06.04 22:48
Re: Existiert die entfernte Datei?1.128WaldiMaywood28.06.04 22:41
Re: Existiert die entfernte Datei?1.332IsoLizer01.07.04 14:16
Re: Existiert die entfernte Datei?1.214WaldiMaywood02.07.04 00:04

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel