2017-02-24 6 views
0

Was soll ich tun? Schließen Sie die Steckdose? Ich kann das Problem nicht sehen, Google hilft nicht Was kann diesen Fehler verursachen? Soweit ich weiß, ist dies eine Systemtyp-Ausnahme. ExceptionSocketError: Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen

Console.WriteLine("Connection Recieved"); 
     while (true) 
     { 
      var handler = socket.Accept(); 
      try 
      { 
       while (handler.Connected) 
       { 
        var x = new byte[200000]; 
        try 
        { 
         handler.Receive(x); 
        } 
        catch (Exception ex) 
        { 
         Console.WriteLine(ex.Message); 
         Console.WriteLine(ex.InnerException); 
         Console.WriteLine(ex.StackTrace); 
        } 
        var command = new string(Encoding.UTF8.GetChars(x.Where(t => t != 0).ToArray())); 
        if (string.IsNullOrEmpty(command)) 
        { 
         break; 
        } 
        var data = (Dictionary<string, object>)JsonConvert.DeserializeObject(command, (typeof(Dictionary<string, object>))); 
        if (data["command"].ToString() != "getLog") continue; 
        var response = GetStatus(); 
        handler.Send(Encoding.UTF8.GetBytes(response)); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
       Console.WriteLine(ex.InnerException); 
       Console.WriteLine(ex.StackTrace); 
      } 
     } 
+1

Das Problem liegt wahrscheinlich auf der anderen Seite der Verbindung. Höchstwahrscheinlich eine nicht behandelte Ausnahme. – HebeleHododo

+0

Dies tritt meistens auf, wenn ein Client die Verbindung trennt. –

+1

Mögliches Duplikat von [Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen] (http://stackoverflow.com/questions/2582036/an-existing-connection-was-forcibly-closed-by-the-remote-host) – HebeleHododo

Antwort

0

Well "gut abstrahiert mit mehreren Schichten von Protokollen Vernetzung", während mit verschiedenen Abschaltungen (Soft-transient Umgang: eg.timeout, verwertbar: eg.prepaid Datenplan Grenze überschritt, vorübergehende Hardware: slim fadenscheinigen Lenovos rj45 Buchsen verlieren, nicht behebbare Hardware) ...

ist ein Problem, das ist schwer, weil die Bibliotheken und Entwickler und Endbenutzer jeweils unterschiedliche Bedürfnisse in Bezug auf die Fehlerbedingungen, die abhängig von der Art der Lib oder App oder Nutzung beteiligt sind .

John Carmack hat gerade etwas über "Abstractions 5uck" getwittert, aber in der Vernetzung ist es nicht vernünftig, dass jeder TLS oder was auch immer reimplementiert. Was kann angeschaut werden, welche Art von Schnittstellen praktisch sind (einige C-Leute haben sich wahrscheinlich wegen dieser Fehlerfluss-Probleme gegen Streams ausgesprochen) und wie Fehler und Warnungen während der Laufzeit fließen und Bibliotheks-Autoren Hinweise für den Compiler hinzufügen könnten, die der "Compiler fließt "während der Entwicklungserfahrung so, dass Entwickler davor gewarnt werden, welche Art von Fehlern sich von der niedrigeren Ebene und durch die Abstraktionen ausbreiten können, wenn es solche gibt. Mehrfache Rückgabewerte bieten eine Möglichkeit für Fehler, Status, Warnungsausbreitung, aber Befürworter von Ausnahmen haben argumentiert, dass Ausnahmen schneller sind, wenn sie nicht ausgelöst werden, aber dies kann zu Sprache und Compiler-Implementierung führen - z. jit könnte sich drehen, um Exceptions in hot loop zu verwenden und die Exception in propaetdd Fehler umzuwandeln.

Wenn ich mit C# anfing, war die erste Sache, die ich fand, wie man alle möglichen Arten von Verbindungsabbrüchen handhabt und fand, dass .. ja BCL/C# sieht gut aus, aber der Teufel steckt im Detail, und überraschende Laufzeitausnahmen, die anders sind und von verschiedenen Orten auftauchen, je nach timeout/disconnection/cable-unplug/hw-fault usw. sind wahrscheinlich etwas, das Sprachen und Bibliotheken als "Anwendungsfall" verwenden könnten "um welche die Sprach- und Standardbibliotheken (und Fehler-, Status- usw. -Fluss-Paradigmen) zu gestalten sind, so dass ihre Benutzer sich dieser besser bewusst sind, anstatt zu erraten, welcher Fehler oder welche Ausnahme und von wo sie abstammen könnten. Jetzt ist es schwierig, Fehlerbehandlung im Voraus hinzuzufügen, und einige dieser Bedingungen sind mehr und weniger außergewöhnlich (glitchy rj45 Port in einem Laptop - funktioniert die meiste Zeit) - oder was ist etwas wie Surfable Books abnehmbare Anzeige, wo Sie von einer GPU übergehen zum anderen usw.

Dieses Zeug ist hart und Abstraktionen machen es oft noch schlimmer, aber wir brauchen auch Abstraktionen (wie Netzwerkprotokolle usw.).

Infact dieses Zeug ist so hart, wenn man danach sucht, gibt es nicht viel darüber geschrieben in Bezug auf "wie man Dinge besser für Leute macht, die nicht John Carmack Level-Programmierer sind". Ich sah eine Präsentation, die darauf hinwies, dass funktionale Programmierung einige Antworten haben könnte, aber es ging nicht tief in all die Dinge hinein, die beim Networking passieren konnten, so dass ich nicht 100% davon überzeugt war, dass es die Antwort war, aber es ist ein Anfang.

https://vimeo.com/113707214

, dass die Präsentation war ich sah, aber ja, kann das Modell Arbeit für alles (und möglich mehr), die ich in Bezug auf die Bedürfnisse skizziert?

Verwandte Themen