Pelayan TCP kadangkala menghadapi ralat "Tidak dapat membaca data daripada sambungan pengangkutan: Sambungan sedia ada telah ditutup secara paksa oleh hos jauh" apabila pelanggan cuba menyambung. Artikel ini meneroka punca biasa dan menyediakan penyelesaian.
Ralat, sering muncul di sekitar baris 96 (dalam contoh kod pelayan yang disediakan) semasa sr.ReadLine()
, selalunya berpunca daripada salah konfigurasi keselamatan peringkat pengangkutan.
Ketakpadanan dalam versi protokol TLS antara klien dan pelayan semasa jabat tangan SSL/TLS adalah punca utama ralat ini. Harta System.Net.ServicePointManager.SecurityProtocol
adalah kunci untuk menyelesaikan masalah ini.
Walaupun .NET biasanya merundingkan versi TLS secara automatik, ketidakkonsistenan antara keupayaan pelanggan dan pelayan boleh menyebabkan kegagalan jabat tangan dan mesej ralat.
Untuk memastikan keserasian, tentukan secara eksplisit versi TLS yang disokong menggunakan sifat SecurityProtocol
. Tambahkan baris ini sebelum mewujudkan sambungan:
<code class="language-csharp">System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;</code>
Coretan kod ini mendayakan sokongan untuk TLS 1.0, 1.1 dan 1.2. Padanan versi TLS pada kedua-dua klien dan pelayan menjamin jabat tangan yang berjaya, membolehkan pelayan membaca data daripada klien tanpa gangguan.
Atas ialah kandungan terperinci Mengapa Pelayan TCP Saya Menunjukkan 'Tidak Dapat Membaca Data daripada Sambungan Pengangkutan,' dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!