ホームページ >バックエンド開発 >C++ >TCP サーバーに「トランスポート接続からデータを読み取ることができません」と表示されるのはなぜですか? それを修正するにはどうすればよいですか?

TCP サーバーに「トランスポート接続からデータを読み取ることができません」と表示されるのはなぜですか? それを修正するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-20 06:31:13461ブラウズ

Why Does My TCP Server Show

TCP サーバーの「トランスポート接続からデータを読み取れない」のトラブルシューティング

TCP サーバーは、クライアントが接続しようとすると、「トランスポート接続からデータを読み取ることができません: 既存の接続はリモート ホストによって強制的に閉じられました」というエラーに遭遇することがあります。この記事では、一般的な原因を調査し、解決策を提供します。

このエラーは、sr.ReadLine() 中に (提供されたサーバー コード例の) 96 行目あたりによく表示されますが、多くの場合、トランスポート レベルのセキュリティの構成ミスが原因です。

TLS ハンドシェイクとセキュリティ プロトコルの互換性

SSL/TLS ハンドシェイク中のクライアントとサーバー間の TLS プロトコル バージョンの不一致が、このエラーの主な原因です。 System.Net.ServicePointManager.SecurityProtocol プロパティがこれを解決する鍵となります。

.NET は通常、TLS バージョンを自動ネゴシエートしますが、クライアントとサーバーの機能の間に不一致があると、ハンドシェイクの失敗やエラー メッセージが発生する可能性があります。

解決策: セキュリティ プロトコルを明示的に設定する

互換性を確保するには、SecurityProtocol プロパティを使用してサポートされる TLS バージョンを明示的に定義します。 接続を確立するに次の行を追加します:

<code class="language-csharp">System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;</code>

このコード スニペットにより、TLS 1.0、1.1、および 1.2 のサポートが有効になります。 クライアントとサーバーの両方で TLS バージョンが一致すると、ハンドシェイクが確実に成功し、サーバーは中断することなくクライアントからデータを読み取ることができます。

以上がTCP サーバーに「トランスポート接続からデータを読み取ることができません」と表示されるのはなぜですか? それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。