.NET Tip #5: Ping a stažení souboru

Tomáš Jecha, MVP, MCSD       04.10.2008       C#, VB.NET, .NET Tips       11327 zobrazení

Dnes jsem si připravil pár tipů týkajících se základních úkonů týkajících se počítačové sítě.

Ping - ověření dostupnosti a rychlosti odpovědi zařízení v síti

Použijeme třídu System.Net.NetworkInformation.Ping. Podporuje nastavení vypršení timeoutu, TTL i asynchronní volání. Příklad pro jednoduchý test IP adresy 10.0.0.138:

Dim ping As New System.Net.NetworkInformation.Ping()

' zavolání požadavku (timeout nastaven na 1,5 vteřiny)
Dim pingReply = ping.Send("10.0.0.138", 1500)

' výpis info o výsledku
Console.WriteLine("Adresa: {0}", pingReply.Address)
Console.WriteLine("Status: {0}", pingReply.Status.ToString())
Console.WriteLine("Cas: {0}ms", pingReply.RoundtripTime)
Console.ReadKey()

Stažení souboru pomocí HTTP

Stažení souboru pomocí HTTP protokolu lze snadno provést zapomocí třídy System.Net.WebClient. Opět i zde máme podporu stahování asynchronním způsbem. Příklad, který stáhne a otevře obrázek z internetu:

' cílové jméno souboru v počítači
Dim fileName As String = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "colosseum.jpg")

' stažení souboru
Dim webClient As New System.Net.WebClient()
Console.WriteLine("Stahuji soubor...")
Try
    webClient.DownloadFile("http://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Colosseum_in_Rome-April_2007-1-_copie_2B.jpg/800px-Colosseum_in_Rome-April_2007-1-_copie_2B.jpg", fileName)
    Console.WriteLine("Staženo.")
Catch
    Console.WriteLine("Chyba!")
    Console.ReadKey()
    Return
End Try

' zobrazení souboru
System.Diagnostics.Process.Start(fileName)
Console.ReadKey()

Občas potřebujeme odeslat s požadavkem i autorizační údaje. To se dělá přiřazením třídy implementující ICredentials do WebClient.Credentials. Ukážeme si jak předat základní ověření (jméno a heslo) a ověření aktuálně přihlášeného uživatele ve Windows:

Dim webClient As New System.Net.WebClient()

' předání jména a hesla
webClient.Credentials = New System.Net.NetworkCredential("jmeno", "heslo")
webClient.DownloadFile("http://server/zabezpecenySoubor.jpg", fileName)

' předání aktuálně přihlášeného uživatele
webClient.Credentials = System.Net.CredentialCache.DefaultCredentials
webClient.DownloadFile("http://server/zabezpecenySoubor.jpg", fileName)
Předávání ověření je dobré znát, je možné ho použít při volání webových služeb, přistupování k síťovým prostředkům atp.

 

hodnocení článku

0       Hodnotit mohou jen registrované uživatelé.

 

Nový příspěvek

 

Diskuse: .NET Tip #5: Ping a stažení souboru

Dobrý den,

chtěl bych tento příkaz používat, ale trápí mne to, že v případě, když cíl neodpovídá, tak má aplikace po dobu timeoutu zamrzne. Zatím to řeším takto:

_Ping.StartInfo.FileName = "ping"
        _Ping.StartInfo.Arguments = "-n 1 -w 100 " & _StrojIPadresa
        _Ping.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
        _Ping.Start()

Pak se dotazuji na dokončení a exitCode:

If _Ping.HasExited Then
                Dim _PingExitCode As Integer
                _PingExitCode = _Ping.ExitCode

                If _PingExitCode <> 0 Then
                    MachineOnline.Text = "Stroj offline"
                Else
                    MachineOnline.Text = "Stroj online"
                End If
            End If

Toto ale asi není čisté řešení. Šlo by to vyřešit nějak jinak? Např pomocí vámi zmiňovaného asynchronního volání?

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.

Nyní zakládáte pod článkem nové diskusní vlákno.
Pokud chcete reagovat na jiný příspěvek, klikněte na tlačítko "Odpovědět" u některého diskusního příspěvku.

Nyní odpovídáte na příspěvek pod článkem. Nebo chcete raději založit nové vlákno?

 

  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback