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!