Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TcpClient + Networkstream empfängt nach 30 Sekunden Leerlauf keine Daten mehr
Powerslave
myCSharp.de - Member



Dabei seit:
Beiträge: 554

Themenstarter:

TcpClient + Networkstream empfängt nach 30 Sekunden Leerlauf keine Daten mehr

beantworten | zitieren | melden

Hallo,

ich connecte mich über TCP mit einem Ethernet-Barcodeleser, der eine IP-Adresse hat.

Dazu verwende ich folgenden (vereinfachten) Code:


using (TcpClient client = new TcpClient("192.168.20.41", 1002))
{
    using (NetworkStream stream = client.GetStream())
    {
        while (true)
        {
            int readCount;
            byte[] data = new byte[client.ReceiveBufferSize];

            while (stream.DataAvailable && (readCount = stream.Read(data, 0, client.ReceiveBufferSize)) != 0)
            {
                strData += Encoding.UTF8.GetString(data, 0, readCount);
            }

            if (!string.IsNullOrWhiteSpace(strData) && strData.EndsWith(endOfLine))
            {
                OnRead(strData);
                strData = "";
            }

            //Thread.Sleep(200);
        }
    }
}

Wenn ich die Applikation starte und Barcodes einscanne erhalte ich die richtigen Werte vom Gerät. Wenn ich allerdings 30 Sekunden im Leerlauf bin, also 30 Sekunden lang seit dem Start der Applikation oder seit dem letzten gescannten Barcode vergangen sind, werden keine Daten vom Gerät mehr empfangen. Networkstream.DataAvailable bleibt immer false, TcpClient.Available bleibt immer 0, aber TcpClient.Connected ist immernoch true. Wenn ich die Applikation neustarte, geht es wieder.

Muss ich die Verbindung irgendwie am Leben halten? Was könnte dafür sonst die Ursache sein?
Vielleicht hat jemand eine Idee.

Danke im Voraus!
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.757

beantworten | zitieren | melden

Kann das sein, dass der Scanner einfach nach einer gewissen Zeit die Verbindung kappt und bei einem erneuten Scan einfach neu aufbaut; Du darauf aber nicht reagierst?
private Nachricht | Beiträge des Benutzers
Powerslave
myCSharp.de - Member



Dabei seit:
Beiträge: 554

Themenstarter:

beantworten | zitieren | melden

Danke,
Möglich ist es bestimmt. Hab leider so gut wie keine Schnittstellenbeschreibung vom Gerät. Kann mir aber morgen nochmal die Konfiguration anschauen, ob ich dort was von nem Timeout finde.

Falls es so wäre, wie könnte ich denn darauf reagieren, da meine Applikation ja die Verbindung aufbaut und der Scanner nichts von meiner App weiß?
TcpListener kann ich in diesem Fall ja nicht verwenden, TcpClient ist schon die richtige Komponente oder?
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
private Nachricht | Beiträge des Benutzers
weismat
myCSharp.de - Member



Dabei seit:
Beiträge: 872
Herkunft: Frankfurt am Main

beantworten | zitieren | melden

Manchmal kappen Firewalls oder Endgeräte die Verbindung automatisch, wenn mehr als x-Sekunden nix passiert.
Deswegen gibt es meistens etwas wie eine Ping/Echo-Nachricht, um die Verbindung aufrecht zu erhalten. Schaue danach mal in der Dokumentation.
private Nachricht | Beiträge des Benutzers
Powerslave
myCSharp.de - Member



Dabei seit:
Beiträge: 554

Themenstarter:

beantworten | zitieren | melden

Ok, es ist wirklich ein "Port Timeout = 30 seconds" am Gerät eingestellt.

Dann krieg ich das hin, danke.
Achtung! - Hinter dir ist ein dreiköpfiger Affe!
private Nachricht | Beiträge des Benutzers