2010-11-19 21 views
0

Ich habe eine Client-Server-Anwendung. Die Clients melden sich auf meinem Server an. Die Sache ist, dass mein Server manchmal abstürzt und obwohl ich alles in einer Try-Catch-Anweisung verpackt habe, bekomme ich keine Nachricht.Client - Server-Anwendung stürzt ab

Der Server, den ich implementiert habe, ist hier: .

Hat jemand einen solchen Absturz erlebt? Gibt es einen Ort, an dem ich ein Fehlerprotokoll für die App finden kann?

Ich bin irgendwie verzweifelt, also JEDE Ideen wäre großartig. Vielen Dank.

+0

und übrigens, ich bin Variablen von mehreren Threads ohne Verwendung einer lock-Anweisung zugreifen. Könnte das das Problem für den Absturz sein? – Alex

+0

Welchen Fehler bekommen Sie, wenn Ihr Server abstürzt? Dort sollte ein Stack-Trace enthalten sein, der auf einen Teil des Codes zeigt. Sobald Sie das gefunden haben, zeigen Sie uns den Code, der das Problem verursacht, wenn Sie das Problem nicht selbst gefunden haben. –

+0

nein, da ist nicht !! Das ist so komisch! Das Programm stürzt einfach ab! Ich suche nach jeder Möglichkeit. Entweder funktioniert der Servercode nicht oder der andere Code, den ich geschrieben habe, hat ein Problem – Alex

Antwort

2

Die Anwendung kann wegen nicht behandelter Ausnahmen abstürzen, auch wenn Sie alle Funktionen aufgrund von Multithreading-Operationen in try-catch-Block eingeschlossen haben.

try 
{ 
    var t = new Thread(()=> 
     { 
      Thread.Sleep(5000); 
      throw new Exception(); 
     }); 
    t.Start(); 
    //t.Join(); 
} 
catch 
{ 
    //you can't deal with exception here 
    //even though you uncomment `t.Join` 
    //the application will crash even there is a try-catch wrapped 
} 
1

Wenn Sie im Debugmodus in Visual Studio ausgeführt werden, sollten Sie möglicherweise CLR-Ausnahmen aktivieren, um sie an die Benutzersteuerung weiterzugeben. Ich glaube, sie sind standardmäßig deaktiviert, was manchmal dazu führt, dass Anwendungen ohne Debugger-Feedback hängen bleiben. This article on MSDN könnte von Interesse sein.

2

Haben Sie diesen Teil des Beispielcodes behalten? hinzufügen Console.WriteLine direkt nach dem Fang ...

catch 
    { 
     //a socket error has occured 
     break; 
    }