2017-02-24 24 views
0

どうすればよいですか?ソケットを閉じますか?私は問題を見ることができない、Googleは助けていない 何が原因でこのエラーが発生する可能性がありますか?これはSystem typeの例外です。 ExceptionSocketError:既存の接続がリモートホストによって強制的に閉じられました

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

問題はおそらく接続の反対側にあります。ほとんど処理されない例外です。 – HebeleHododo

+0

これは、主にクライアントの接続が切断されたときに発生します。 –

+1

[既存の接続がリモートホストによって強制的に閉じられました](http://stackoverflow.com/questions/2582036/an-existing-connection-was-forcibly-closed-by-the-remote-host) – HebeleHododo

答えて

0

は、まあ、様々な切断(ソフト過渡に対処しながら、「うまくプロトコルの複数の層とのネットワーク抽象化」:eg.timeout、回復可能:スリム薄っぺらlenovos:計画の制限を超えたデータ、一時的なハードウェアをeg.prepaid ...

は、ライブラリや開発者、エンドユーザのそれぞれが、関連するlibやappの種類や使用方法に依存するエラー条件とは異なるため、難しい問題です。 。

John Carmackは「抽象化5uck」についてちょうどツイートしましたが、ネットワーキングでは誰もがTLSなどを再実装するのは妥当ではありません。実用的なインターフェイスのタイプを見てみることができます(おそらく、これらのエラーフローの問題のためにCストリームがストリームに対して主張しているものもあります)。また、実行時にエラーと警告がどのように流れ、ライブラリライターがコンパイラに対してヒント開発の間に流れます。その結果、devsは、エラーのタイプが低レベルから伝播する可能性がある場合に抽象的に伝播する可能性があるという警告を受け取ります。複数の戻り値は、エラー、ステータス、警告伝播のための1つの方法を提供しますが、例外の支持者は、例外がスローされない場合にはより高速ですが、言語やコンパイラの実装に沸騰する可能性があると主張しています。 jitはホットループで例外を使用して例外をpropagaetdエラーなどに変換する可能性があります。

C#で始めるとき、最初に私が遭遇したのは、可能なすべての種類の切断を処理する方法でした..はいBCL/C#はうまく見えますが、悪魔は細部にあり、驚くべき実行時例外とは異なり、タイムアウト/切断/ケーブル切断/ hwフォルトなどによって異なる場所からポップアップすることはおそらく言語とライブラリが "ユースケースどの言語や標準ライブラリ(およびエラー、ステータスなどのフローパラダイム)を設計して、ユーザーがどのエラーや例外を推測するのではなく、どこから逸脱しているのかをよく知るようにしました。現在、エラー処理を事前に追加しようとするのは難しく、これらの条件のいくつかはますます例外的です(ほとんどの場合、ラップトップの不具合のあるrj45ポートが動作します)。または、Surface Booksのようなもので、GPU

このようなものは難しく、抽象化がしばしば悪化しますが、ネットワークプロトコルなどの抽象概念も必要になります。

あなたはそれを探すなら、「John Carmackレベルのプログラマーではない人のために物事をより良くする」という点で、このことについて書かれたものはほとんどありません。私は1つのプレゼンテーションが機能プログラミングにいくつかの答えがあるかもしれないことを示唆していたが、それはネットワーキングで起こり得るすべてのことに深く関わっていなかったので、100%は解答ではないと確信した。私はニーズの観点から概説することを私が見たプレゼンテーションが、ええ、できることモデルはすべてのための仕事(と可能性より)だった

https://vimeo.com/113707214

関連する問題