1. ホーム
  2. c#

[解決済み】既存の接続がリモートホストによって強制的に切断されました。

2022-04-28 03:24:55

質問

商用アプリケーションで作業していますが、メッセージとともにSocketExceptionがスローされます。

既存の接続はリモートホストによって強制的に閉じられました。

これは、クライアントとサーバー間のソケット接続で発生します。接続は正常で、大量のデータが転送されていますが、突然切断されます。

このような現象を見たことがある方はいらっしゃいますか?原因は何でしょうか?私はいくつかの原因を推測することができますが、また、原因を解決するために、このコードにさらに追加する方法はありますか?

ご意見・ご感想をお待ちしております。

... 最新の ...

私はいくつかの.NETトレースからいくつかのログを持っています。

System.Net.Sockets Verbose: 0 : [8188] Socket#30180123::Send() DateTime=2010-04-07T20:49:48.6317500Z

System.Net.Sockets Error: 0 : [8188] Exception in the Socket#30180123::Send - An existing connection was forcibly closed by the remote host DateTime=2010-04-07T20:49:48.6317500Z 

System.Net.Sockets Verbose: 0 : [8188] Exiting Socket#30180123::Send() -> 0#0

と書いてあることを、私が見たログの他の部分から判断すると 0#0 は、長さ0バイトのパケットを送信していることを意味します。しかし、それは実際には何を意味するのでしょうか?

2つの可能性のどちらかが発生しており、どちらかわからない。

  1. 接続は閉じられるが、データはソケットに書き込まれるため、上記のような例外が発生します。そのため 0#0 は、ソケットがすでに閉じられているため、何も送信されなかったことを意味します。

  2. 接続はまだ開いていて、0バイトのパケットを送信中(つまりコードにバグがある)であり 0#0 は、0バイトのパケットを送信しようとしていることを意味します。

どうでしょう?結論は出ないかもしれませんが、もしかしたら、このようなことを見たことがある人がいるかもしれませんね。

解決方法は?

これは一般的に、リモート側が接続を閉じたことを意味します(通常、TCP/IPの RST パケットを送信します)。サードパーティーのアプリケーションを使用している場合、考えられる原因は以下の通りです。

  • アプリケーションに不正なデータを送信している(HTTPサーバーへのHTTPSリクエストの送信などが考えられる)。
  • クライアントとサーバー間のネットワークリンクが何らかの理由でダウンしている
  • サードパーティアプリケーションのバグを誘発し、クラッシュさせた。
  • サードパーティアプリケーションがシステムリソースを使い果たした

最初のケースに該当する可能性が高いです。

を起動させることができます。 ワイヤーシャーク を使用して、ワイヤ上で何が起こっているかを正確に確認し、問題を絞り込むことができます。

より具体的な情報がない場合、ここにいる誰も本当の意味であなたを助けることはできないでしょう。