WinFuture-Forum.de: Internetverbindung prüfen - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Internetverbindung prüfen mit C#


#1 Mitglied ist offline   holunder 

  • Gruppe: Mitglieder
  • Beiträge: 15
  • Beigetreten: 12. Juli 12
  • Reputation: 0
  • Geschlecht:Weiblich

geschrieben 19. Juli 2012 - 11:53

Hallo, ich würde gerne nach dem Klick auf einen Button prüfen, ob eine Internetverbindung besteht. Bisher habe ich nur folgenden Code als Nützlich empfunden:

using System.Net.NetworkInformation;
[...]
private void CheckButton_Click(object sender, System.Windows.RoutedEventArgs e)
		{			
			Ping ping = new Ping();
			PingReply reply = ping.Send("http://www.google.at/");
			
			if (IPStatus.Success != reply.Status)
			{
				MessageBox.Show("Juhu!");
			}			
			else
			{
				MessageBox.Show("Ohje...");
			}			
		}


Führe ich das durch, stürzt mein Programm ab.


edit: uch seh grad, in der falschen Kategorie gelandet. Mist

Dieser Beitrag wurde von holunder bearbeitet: 19. Juli 2012 - 12:03

0

Anzeige



#2 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 19. Juli 2012 - 12:05

Zieh dir mal das Windows API Code Pack, dort findest du eine Klasse NetworkManager. Das Pack kommt mit Doku daher, das sollte also kein Problem darstellen, das rauszusuchen.
Ein Vorteil davon, dass so zu machen, ist dass du den Windows'schen Verbindungsstatus bekommst. Es ist also ausgeschlossen, dass das System und dein Programm verschiedene Status melden, was den Nutzer verdammt verwirren würde.

Edit: ich habe gerade noch was Kompaktes gefunden:
[DllImport("wininet.dll")] 
private extern static bool InternetGetConnectedState(out int Description, int ReservedValue); 
 
//Creating a function that uses the API function... 
public static bool IsConnectedToInternet() 
{ 
    int Desc; 
    return InternetGetConnectedState(out Desc, 0); 
} 



Das Windows API Code Pack geht ab Windows Vista, das vorgestellte kurze Sample ab Windows 2000.

PS: "Stürtzt mein Programm ab" ist mal extremst verdammt unspezifisch. Lass das im Debugger deiner IDE laufen, dann kannst du sehen, welche Ausnahme wo aufgetreten ist.

Dieser Beitrag wurde von Kirill bearbeitet: 19. Juli 2012 - 12:16

Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

#3 Mitglied ist offline   holunder 

  • Gruppe: Mitglieder
  • Beiträge: 15
  • Beigetreten: 12. Juli 12
  • Reputation: 0
  • Geschlecht:Weiblich

geschrieben 19. Juli 2012 - 12:15

Erstmals danke für die schnelle Antwort.
Ich probier grad etwas an Microsoft Expression Blend rum und da kam halt kein Fehler sondern da stürzt das Programm ab ohne sonstige Fehlermeldungen.
Hab dies nun auf Visual Studio ausprobiert und da kommt die "PingException" bei der Zeile "PingReply reply = ping.Send("www.google.at"); " zeigt's mir an.

edit:
Ich hab nun ein Try-catch draus gemacht und die Exception abgefangen um die mit einer MessageBox auszugeben, hier kommt die Fehlermeldung "der angegebene Host ist unbekannt"

Dieser Beitrag wurde von holunder bearbeitet: 19. Juli 2012 - 12:38

0

#4 Mitglied ist offline   Kirill 

  • Gruppe: aktive Mitglieder
  • Beiträge: 3.590
  • Beigetreten: 04. Dezember 06
  • Reputation: 121
  • Geschlecht:Männlich
  • Wohnort:BT

geschrieben 19. Juli 2012 - 12:58

Und ich sag's nochmal, benutz einfach die Systemmethoden, entweder mit dem Code Pack oder halt dem Codeschnipsel. Einen Host anzupingen kann aus gefühlt 1000 Gründen schiefgehen. Der Host kann lange Antwortzeiten haben oder gar ausfallen. Der .at-Host ist für Österreich sinnvoll, für andere Länder nicht. Oder es liegen Netzwerkprobleme vor, die ein teilweise funktionierendes Netzwerk hervorbringen, das ganze mit verheerenden Folgen. Daher: benutze einfach Systemmethoden! InternetGetConnectedState liefert ein True zurück, wenn du verbunden bist und False wenn nicht. In Desc steht ein Code, der die konkrete Situation beschreibt, was du aber auch ignorieren kannst.

Was bei dir hier schiefgeht, http:// ist kein Teil vom Host, das ist das Protokoll. Und über HTTP pingt man nicht, man pingt über ICMP. Du machst ein www.google.at draus und gut is.

Dieser Beitrag wurde von Kirill bearbeitet: 19. Juli 2012 - 12:59

Most rethrashing{
DiskCache=AllocateMemory(GetTotalAmountOfAvailableMemory);}
0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0