1. ホーム
  2. c#

[解決済み] TcpClientの接続を適切かつ完全に閉じる/リセットする方法は?

2023-05-17 15:50:16

質問

TcpClient 接続を閉じる、またはリセットする正しい方法は何ですか? ハードウェアと通信するソフトウェアがありますが、時々何かがうまくいかず、ソフトウェアを再起動するまで うまくいかず、ソフトウェアを再起動するまで、ハードウェアとの通信ができなくなることがあります。

TcpClient.Close() を強制的に実行し、さらにそれをヌルに設定することも試みましたが、うまくいきません。 ソフトウェアの完全な再起動のみが機能します。

提案はありますか?


TpcClient は 1 つの場所でしか定義されていませんが、ライブラリ全体で使用されているため、using キーワードを使用することができません。(そして、常に 1 つの接続しかありません)。

通信を処理するライブラリなのです。ソフトウェア自身がControllerクラス(ハードウェアを表す)のResetConnection()メソッドを呼び出すことができるのです。

現在は以下のようになっています。

if (tcpClient != null)
{
    tcpClient.Close();
    tcpClient = null;
}

ここで読んだところでは、私は " = null" の代わりに tcpClient.Dispose() を使用すべきです。

それを試して、違いがあるかどうか見てみます。

どのように解決するのですか?

接続を閉じる前に、ストリームを閉じる必要があります。

tcpClient.GetStream().Close();
tcpClient.Close();

クライアントを閉じても、ストリームは閉じません。