C-Sharp - NetworkStream - Wie auf vorhandene Daten prüfen?
Hallo,
ich habe einen TCP-Client in C# programmiert. Prinzipiell wartet er nur auf Daten vom Server und verarbeitet sie.
Da der NetworkStream kein Event besitzt, das ausgelöst wird, wenn Daten empfangen wurden prüfe ich zyklisch mit einem Timer ob Daten vorliegen.
Zum Test der Verbindung wird ein Ping-Pong-Verfahren verwendet. Grundsätzlich funktioniert der Client. Ab und zu wird das Pong, die Antwort vom Server, jedoch nicht vom Client empfangen, obwohl die Verbindung noch besteht. Der Client geht dann davon aus, dass die Verbindung unterbrochen wurde und versucht entsprechend eine neue Verbindung aufzubauen.
Ich vermute, dass das Problem bei meinem Datenempfang mit dem Timer liegt.
Welche Alternativen gibt es zum Datenempfang?
Danke
mabue
ich habe einen TCP-Client in C# programmiert. Prinzipiell wartet er nur auf Daten vom Server und verarbeitet sie.
Da der NetworkStream kein Event besitzt, das ausgelöst wird, wenn Daten empfangen wurden prüfe ich zyklisch mit einem Timer ob Daten vorliegen.
Zum Test der Verbindung wird ein Ping-Pong-Verfahren verwendet. Grundsätzlich funktioniert der Client. Ab und zu wird das Pong, die Antwort vom Server, jedoch nicht vom Client empfangen, obwohl die Verbindung noch besteht. Der Client geht dann davon aus, dass die Verbindung unterbrochen wurde und versucht entsprechend eine neue Verbindung aufzubauen.
Ich vermute, dass das Problem bei meinem Datenempfang mit dem Timer liegt.
Welche Alternativen gibt es zum Datenempfang?
Danke
mabue
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 245058
Url: https://administrator.de/forum/c-sharp-networkstream-wie-auf-vorhandene-daten-pruefen-245058.html
Ausgedruckt am: 24.04.2025 um 19:04 Uhr
4 Kommentare
Neuester Kommentar
Moin mabue,
eine Möglichkeit ist die Nutzung der asynchronen Funktionen BeginRead und EndRead die eine Callback Procedure aufrufen sobald Daten empfangen werden.
Wie du das ganze in einem Loop realisierst, kannst du an einem Beispiel hier nachlesen:
http://social.msdn.microsoft.com/Forums/en-US/d6156c86-6efc-429a-9ba5-5 ...
Grüße Uwe
eine Möglichkeit ist die Nutzung der asynchronen Funktionen BeginRead und EndRead die eine Callback Procedure aufrufen sobald Daten empfangen werden.
Wie du das ganze in einem Loop realisierst, kannst du an einem Beispiel hier nachlesen:
http://social.msdn.microsoft.com/Forums/en-US/d6156c86-6efc-429a-9ba5-5 ...
Grüße Uwe
Zitat von @mabue88:
Macht es Sinn anstelle von "Connect()" ebenfalls mit dem Verbindungssteuerung auf ein asynchrones Verfahren
umzustellen?
Ist immer eine Frage wie das Programm aufgebaut ist.Macht es Sinn anstelle von "Connect()" ebenfalls mit dem Verbindungssteuerung auf ein asynchrones Verfahren
umzustellen?
Im Netz konnte ich bis jetzt keine Beschreibung finden, die mir erklärt, was passiert, wenn nach dem Aufruf von "BeginConnect" keine Verbindung zum Server aufgebaut werden kann...
http://msdn.microsoft.com/de-de/library/tad07yt6%28v=vs.110%29.aspxUnten Ausnahmen stehen die entsprechenden Exceptions die auftreten falls keine Verbindung zustande kommt. Diese Situation kannst du also mit Try..Catch abfangen, feddich
Grüße Uwe