Entwickler-Ecke
C# - Die Sprache - PingExeptinon wurde nicht behandelt
sirampersand - Mi 25.11.09 21:32
Titel: PingExeptinon wurde nicht behandelt
Hi,
Ich bin zwar relativ neu in C# trotzdem bin ich total happy das ich in relativ kurzer Zeit ein Programm zusammenbasteln konnte das mir ein Array von hosts pingt. (string[] myArr)
Der einzige Vermutstropfen ist das wenn ein host nicht existiert oder nicht aufgelößt werden kann das Programm nicht kompiliert wird. Fehler: PingExeptinon wurde nicht behandelt!
In dieser Zeile ist die Krux:
C#-Quelltext
1:
| PingReply xreply = myPing.Send(tempElement, timeout, buffer, pingOptions); |
Scheinbar kommt NULL oder es stimmt was nicht mit den Typen
ich habe zwar versucht alle möglichkeiten abzufangen aber scheinbar ist da was anderes faul. (siehe else Zweig)
hier der code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76:
| using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.NetworkInformation;
namespace PingApplikation { public class Circle { static void Main(string[] args) { Ping myPing = new Ping(); string[] myArr = { "wsnx001", "wsnx002"};
byte[] buffer = new byte[32]; int timeout = 1000; PingOptions pingOptions = new PingOptions(); foreach (string tempElement in myArr) { Console.WriteLine(tempElement); PingReply xreply = myPing.Send(tempElement, timeout, buffer, pingOptions); Console.WriteLine(xreply.Status);
if (xreply.Status == IPStatus.Success) { Console.WriteLine("Antwort in {0}ms erhalten", xreply.RoundtripTime); } else if (xreply.Status == IPStatus.TimedOut) { Console.WriteLine("-Timeout-"); } else if (xreply.Status == IPStatus.Unknown || xreply.Status == IPStatus.DestinationNetworkUnreachable || xreply.Status == IPStatus.DestinationHostUnreachable || xreply.Status == IPStatus.DestinationProhibited || xreply.Status == IPStatus.DestinationProtocolUnreachable || xreply.Status == IPStatus.DestinationPortUnreachable || xreply.Status == IPStatus.NoResources || xreply.Status == IPStatus.BadOption || xreply.Status == IPStatus.HardwareError || xreply.Status == IPStatus.PacketTooBig || xreply.Status == IPStatus.BadRoute || xreply.Status == IPStatus.TtlExpired || xreply.Status == IPStatus.TtlExpired || xreply.Status == IPStatus.ParameterProblem || xreply.Status == IPStatus.SourceQuench || xreply.Status == IPStatus.BadDestination || xreply.Status == IPStatus.DestinationUnreachable || xreply.Status == IPStatus.TimeExceeded || xreply.Status == IPStatus.BadHeader || xreply.Status == IPStatus.UnrecognizedNextHeader || xreply.Status == IPStatus.IcmpError || xreply.Status == IPStatus.DestinationScopeMismatch ) { Console.WriteLine("sukki"); } else { Console.WriteLine("eeee"); } }
Console.ReadKey(); } } } |
Kann mir wer weiterhelfen in Theorie und Praxis?
Danke für Eure Hilfe !
Ampersand
Moderiert von
Narses: C#-Tags hinzugefügt
danielf - Do 26.11.09 09:36
Hallo und :welcome:,
du bekommst wahrscheinlich den Fehler nicht, wenn du kompilierst, sondern zur Laufzeit.
.NET und andere OO Programmiersprachen verwenden für die Fehlerbehandlungen sogenannte Ausnahmebehandlungen/Exceptions (
http://openbook.galileocomputing.de/csharp/kap04.htm).
Sprich bei den Status-Informationen ging vom Protokoll her alles in Ordnung und du bekommst einen definierten StatusCode zurück. Tritt allerdings etwas "unkonformes" auf, dann wird eine Exception geschmissen.
Welche das genau sind, kannst du im .NET Framework auf der MSDN-Seite nachschauen (
http://msdn.microsoft.com/de-de/library/7hzczzed(VS.80).aspx).
Im oberen Link ist ja auch beschreiben, wie du auf einen solchen Fehler reagieren kannst. Sollte es nicht helfen, schreib bitte nochmal.
Gruß Daniel
sirampersand - Do 26.11.09 18:38
Hallo Danielf,
Vielen Dank für die einfache aber kompetente Hilfe und die Links. Der erste hat ganz toll geholfen, schnell mal try und catch eingebaut
C#-Quelltext
1: 2: 3: 4:
| catch (Exception e) { Console.WriteLine("Exception " + e.Message); } |
und schon lief das Programm (der Debugger) durch :-)
Die (zu erwartende) Fehlermeldung wurde auch ausgebeben:
"Exception Während einer Pinganforderung ist eine Ausnahme aufgetreten."
...Hinzufügen in den catch block von...
C#-Quelltext
1:
| Console.WriteLine("Exception {0}", e); |
... ergab tiefere Einblicke, die aufschluss gaben warum meine elesif Orgie überflüssig war ....
(der Fehler kommt aus einer ganz anderen Klasse oder so....)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Exception System.Net.NetworkInformation.PingException: Während einer Pinganforde rung ist eine Ausnahme aufgetreten. ---> System.Net.Sockets.SocketException: Der angegebene Host ist unbekannt bei System.Net.Dns.GetAddrInfo(String name) bei System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6 ) bei System.Net.Dns.GetHostAddresses(String hostNameOrAddress) bei System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 t imeout, Byte[] buffer, PingOptions options) --- Ende der internen Ausnahmestapelüberwachung --- bei System.Net.NetworkInformation.Ping.Send(String hostNameOrAddress, Int32 t imeout, Byte[] buffer, PingOptions options) bei PingApplikation.Circle.Main(String[] args) in F:\Visual Studio 2008\Proje cts\NetPinger\NetPinger\Program.cs:Zeile 38. |
Die Zweiter link hat mir nicht so viel beigebracht, ich hab dann ein wenig gesucht und bin auf
http://msdn.microsoft.com/de-de/library/system.net.sockets.socketexception(VS.80).aspx
gestoßen, tiefer konnte ich aber nicht mehr weil mir dazu noch der Horizont fehlt, macht aber nix, bin ja erst kurz dabei!!!
Nochmals recht herzlichen Dank,
C# macht spass ;-) :D
Gruß Ampersand
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!