2017-11-02 8 views
0

Ich habe diesen Code zum Herstellen einer Verbindung mit Streaming-Server. der Server trennt sich von Zeit zu Zeit und ich möchte es erkennen und die Verbindung neu starten wenn neede.C# NetworkStream erkennen alle Arten von Verbindungsabbrüchen und Ausnahmen

Wie kann ich in diesem Code irgendwelche Ausnahmen feststellen?
Weil ich jetzt die Verbindung getrennt bekomme und es nicht fangen kann.

this.ns = new NetworkStream(server); 
while (true) 
{ 
    // Incoming message may be larger than the buffer size. 
    do 
    { 
     byte[] myReadBuffer = new byte[10240 * 5]; 
     await this.ns.ReadAsync(myReadBuffer, 0, myReadBuffer.Length).ContinueWith((numberOfBytesRead) => 
     { 
      string message = Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead.Result); 
      p.Invoke(message); 
     }); 
    } 
    while (this.ns.DataAvailable); 
} 
+0

Wenn dieser Code wie gewünscht funktioniert und Sie nur Vorschläge zu möglichen Verbesserungen wünschen, sollten Sie diese Frage an [Code Review] (https://codereview.stackexchange.com) senden. –

+0

@ s.m. nicht wirklich, ich bekomme Ausnahmen und kann sie nicht fangen ... – SexyMF

+0

Haben Sie versucht, den Code in try/catch für die richtigen Ausnahmen zu verpacken? –

Antwort

1

Ihre variable numberOfBytesRead ist eigentlich die vorherige Aufgabe, von wo aus man fertig ist zu überprüfen, ob es abgeschlossen oder fehlgeschlagen ist.

if(numberOfBytesRead.IsFaulted) 
{ 
    var aggregatedEx = numberOfBytesRead.Exception; 
    //do something 
} 
+0

Beachten Sie, dass es keinen Grund gibt, 'ContinueWith' hier zu verwenden. 'var numberOfBytesRead = erwarten ns.ReadAsync (...); var message = ... '. – Evk

Verwandte Themen