Guten Morgen, für eine spezielle Anwendung verwende ich in C# die asynchrone Mechanismus von der Ping-Klasse. Sobald ich kurzzeitig die Ethernetverbindung eines Teilnehmer deaktiviere (Netzwerkkabel aus Buchse gezogen) und im Anschluss wieder aktiviere, erhalte ich zwei bis drei TimeOuts. In einem zyklischen Timer mit 1 Sekunde werden andauernd Pings an die entsprechenden Teilnehmer gesendet. In der Ping Callback Methoden wird dann auf die entsprechenden Ping Echos bzw. TimeOuts reagiert. Den TimeOut habe ich bei mir auf 2 Sekunden eingestellt. Ist dieses Verhalten normal oder müsste ich bei der Implementierung noch was beachten? Siehe asynchrone Verwendung der Ping-Klasse: https://msdn.microsoft.com/de-de/library/system.net.networkinformation.ping(v=vs.110).aspx
wenn das nur zum Testen und spielen ist, ist es ok.
Sollte doch mehr dahinter stecken, dann Überlege noch mal!
>Netzwerkkabel aus Buchse gezogen
Deine Timeouts sind doch keine Timeouts der Ping-Funktion.
(nicht alle)
Ich kenne das .Net und C# nicht, aber müsstest du nicht den
Netzwerkstatus überwachen(Link Lost), bevor du eine Message auf den Bus
legst?
1) es sollte eine Error-Meldung von der Sende-Funktion kommen, da kein
Link da ist, kann nichts gesendet werden!
2) wenn kein Link, dann sollte dein Programm auch nichts senden! (->
kein Timeout)
Also: Prüfe dein Netz, wenn kein Link - dann nichts senden und in ruhe
abwarten und Tee trinken(dein Programm in den Safe-State bringen). Ist
das Netz da(Link), dann feuere deine Pings los, aber mit bedacht!
Den Trick mit den Kabel ziehen, hab ich auch schon bei unseren
Praktikanten gemacht und die haben die Fehler auch unterschlagen wie du.
lol
Einer hatte sogar eine Endless-Loop aus versehen gebaut und mit dem
async das ganze Netz geflutet. Wie viele Sends machst du, bis du einen
Fehler feststellst?
Sobald ich das Netzwerkkabel vom Gerät ziehe, dann wird in der PingCompletedCallback Methode kein Fehler detektiert. Es wird ein TimeOut gemeldet aber kein Error. Wie kann man im Asynchrone Mechanismus eine Fehlerhaft Netzwerkverbindung korrekt detektieren?
was sagt: - AsyncCompletedEventArgs.Error-Eigenschaft - NetworkInterface.OperationalStatus-Eigenschaft - NetworkAvailabilityEventArgs >Stellt Daten für das NetworkAvailabilityChanged-Ereignis bereit. - NetworkChange >Ermöglicht Anwendungen das Empfangen einer Benachrichtigung, wenn sich die >IP (Internet Protocol)-Adresse einer Netzwerkschnittstelle, auch als >Netzwerkkarte oder -adapter bezeichnet, ändert. mehr kann ich dazu auch nicht sagen. Bin kein .Net Entwickler nur C++.
Noch eine Frage: Läuft der Timeout wirklich ab, oder wird abgebrochen?
Sobald ich das Netzwerkkabel vom Zielgerät entferne, wird immer in die Callback PingCompletedCallback Methode gesprungen. In einem Timer wird zyklisch ein Ping gesendet. Wie kann ich festellen, ob der Tiemout abläuft?
Entwickler schrieb: > Sobald ich das Netzwerkkabel vom Zielgerät entferne, wird immer in die > Callback PingCompletedCallback Methode gesprungen. direkt danach? das hört sich doch gut an, er will dir was sagen! :-) Prüfe den Status(???) PingCompletedEventArgs ???
In PingCompletedEventArgs wird entweder ein Timeout oder Success vermerkt aber kein Error oder Cancelled.
Jede Sekunde wird in einem Timer ein Ping durch die Funktion SendAsync gesendet. Der Timeout habe ich auf 2 Sekunden eingestellt. Was müsste ich tun, sobald ein Timeout in der Callback Methode aufschlägt? Mit sicherheit liegt es an der Implementierung.
Hab vergessen mitzuteilen, dass nur am Zielgerät das Netzwerkkabel nicht angeschlossen ist. Am Client PC steckt das Netzwerkkabel.
Vll. beschreibst du mal was du machen möchtest, evtl. kann dir ja dann jemand besser helfen. Oder ist der Sinn deiner "speziellen Anwendung" zu prüfen ob der andere Rechner noch auf Pings reagiert?
@Entwickler da kann ich dir auch nicht weiterhelfen, sorry. Bei uns wird das folgendermaßen gemacht: Der Send darf nur bei einem Link oder einem Loopback ausgeführt werden und Softwareseitig ist eine Anfrage an einem Device mit max 3 Pings gleichzeitig erlaubt. (soll den Trafic begrenzen) Bei einem Empfangshändler wird bei einem schlechten Empfang(Timeout/Error), der Status des Netzwerks geprüft und entsprechen behandelt. Der Neustart darf erst wieder bei guten Netzwerk-Status erfolgen. Kannst du sagen was du machen möchtest? Wie gesagt, für die Schule sollte doch deine Version reichen, die Lehrer haben meist eh keine Ahnung.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.