Deserialisasi Struktur daripada Penerimaan TCP Selepas Awalan Panjang
Masalah:
Apabila menyahsiri tersuai struct yang diterima melalui TCP dari mesin yang berasingan, pengecualian ditemui: "System.Runtime.InteropServices.SafeArrayTypeMismatchException".
Pelaksanaan Asal:
Struktur termasuk kaedah bersiri untuk menyediakan dan mendapatkan semula data sebelum dan selepas penghantaran. Pengepala ditambahkan pada bait yang dihantar untuk menunjukkan saiz data masuk, dalam format "l=xxxx;". Akhir penerima mencari pengepala ini, mengekstrak bait paket dan cuba menyahsirikannya.
Punca Pengecualian:
Punca utama terletak pada pergantungan pada rentetan untuk penentuan panjang paket. Pendekatan ini boleh membawa kepada ketidakkonsistenan apabila memindahkan data melalui rangkaian.
Penyelesaian:
Laksanakan Awalan Panjang:
Daripada menggunakan rentetan pengepala, laksanakan awalan panjang yang betul. Ini melibatkan penambahan pengepala tetap pada setiap "paket" yang dihantar, mewakili panjang data. Panjang ini ditukar kepada bait, menghasilkan 4 bait. Pengepala data dan paket itu sendiri kemudiannya dilampirkan.
Struktur Paket:
[Panjang (4 bait)][Pengepala (1 bait)][Data (x bait(s)]
Penerimaan Paket dan Penghuraian:
Atas ialah kandungan terperinci Bagaimana untuk Menyahsiri Struct dengan Aman daripada Strim TCP Berawalan Panjang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!