Hallo zusammen,
ich habe mir ein Programm geschrieben das per TCP eine Verbindung zu einem Scanner herstellt.
Die Verbindung und Datenübertragung funktioniert auch sehr gut. Jedoch kann es dazu kommen das die Verbindung abbrechen kann. Somit können vom Scanner keine Daten mehr empfangen werden.
Wie kann ich am besten eine automatischen reconnect erstellen wenn der Scanner die Verbindung verloren hat? Und gibt es da eine Anzeige wenn keine Verbindung mehr besteht?
Hier mein Code
public class Communicator
{
public event ScanEventHandler ScanEvent;
private TcpClient Client;
private NetworkStream stream;
byte[] buffer;
string _scanData;
bool _scannerDisconnect;
public IPAddress Ip { get; set; }
public int Port { get; set; }
public ommunicator(string ip, int port)
{
this.Ip = IPAddress.Parse(ip);
this.Port = port;
}
/// <summary>
/// Verbindungsaufbau zum Scanner über TCP
/// </summary>
/// <returns></returns>
public bool Connect()
{
try
{
Client = new TcpClient();
Client.ReceiveBufferSize = 8192;
Client.Connect(new IPEndPoint(this.Ip, this.Port));
stream = Client.GetStream();
ScanKltLabel();
BeginRead();
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// Trennen der Verbindung zum Scanner
/// </summary>
/// <returns></returns>
public bool Disconnect()
{
try
{
Client.Close();
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// Erstellt einen Buffer
/// </summary>
private void BeginRead()
{
buffer = new byte[1024];
stream.BeginRead(buffer, 0, buffer.Length, ReadComplete, buffer);
}
/// <summary>
/// Funktion die die gesendeten Daten vom Scanner interpretiert
/// </summary>
/// <param name="iar"></param>
private void ReadComplete(IAsyncResult iar)
{
buffer = (byte[])iar.AsyncState;
stream.EndRead(iar);
string readData = Encoding.ASCII.GetString(buffer);
if (!readData.Contains("OK"))
this.ScanData = Encoding.ASCII.GetString(buffer).TrimEnd('\0').Replace("\r", "");
BeginRead();
}
}
Grüße
Nejox