Asynchrone Mechanismus der Ping-Klasse C#

Gast #4109783
Lesenswert?

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
Gast #4109890
Lesenswert?

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?
Gast #4109973
Lesenswert?

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?
Gast #4110023
Lesenswert?

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++.
Gast #4110033
Lesenswert?

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?
Gast #4110071
Lesenswert?

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.
Gast #4110115
Lesenswert?

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?
Gast #4110151
Lesenswert?

@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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren