Bei TCP-Servern tritt manchmal der Fehler „Daten von der Transportverbindung können nicht gelesen werden: Eine bestehende Verbindung wurde vom Remote-Host zwangsweise geschlossen“ auf, wenn Clients versuchen, eine Verbindung herzustellen. Dieser Artikel untersucht häufige Ursachen und bietet eine Lösung.
Der Fehler, der häufig in Zeile 96 (im bereitgestellten Servercodebeispiel) während sr.ReadLine()
auftritt, ist häufig auf Fehlkonfigurationen der Sicherheit auf Transportebene zurückzuführen.
Eine Nichtübereinstimmung der TLS-Protokollversionen zwischen Client und Server während des SSL/TLS-Handshakes ist eine Hauptursache für diesen Fehler. Die System.Net.ServicePointManager.SecurityProtocol
-Eigenschaft ist der Schlüssel zur Lösung dieses Problems.
Während .NET TLS-Versionen normalerweise automatisch aushandelt, können Inkonsistenzen zwischen Client- und Serverfunktionen zu Handshake-Fehlern und der Fehlermeldung führen.
Um die Kompatibilität sicherzustellen, definieren Sie die unterstützten TLS-Versionen explizit mithilfe der Eigenschaft SecurityProtocol
. Fügen Sie diese Zeile vor dem Verbindungsaufbau hinzu:
<code class="language-csharp">System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;</code>
Dieses Code-Snippet ermöglicht die Unterstützung für TLS 1.0, 1.1 und 1.2. Die Übereinstimmung der TLS-Versionen auf Client und Server garantiert einen erfolgreichen Handshake, sodass der Server ohne Unterbrechung Daten vom Client lesen kann.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein TCP-Server an, dass Daten von der Transportverbindung nicht gelesen werden können, und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!