Struktur Deserialisasi Diterima Melalui TCP dalam C#
Masalah:
Apabila menghantar struct bersiri , RemuseNetworkPacket, melalui TCP, penyahserikatan pada mesin yang berasingan menghasilkan a SafeArrayTypeMismatchException. Format awalan panjang ialah l=xxxx;;, dengan xxxx mewakili panjang paket.
Penyelesaian:
Isu timbul daripada awalan panjang dikendalikan sebagai rentetan bukannya integer. Awalan panjang hendaklah dilaksanakan dengan betul:
-
Tukar panjang paket kepada bait: Tukar panjang data paket (tidak termasuk awalan panjang dan pengepala) kepada tatasusunan bait. Ini biasanya akan menghasilkan 4 bait.
-
Tambah awalan panjang dan pengepala: Gabungkan tatasusunan bait panjang dengan pengepala data paket dan data paket sebenar.
-
Struktur paket: Struktur paket yang terhasil hendaklah: [Length (4 bait)][Header (1 bait)][Data (x bait)].
Menerima dan Menyahsiri:
-
Panjang baca: Baca 4 bait pertama (panjang) dan tukarkannya kepada a integer.
-
Baca pengepala: Baca bait seterusnya (pengepala).
-
Baca data: Baca x bait (di mana x ialah panjang yang diperolehi dalam langkah 1) ke dalam tatasusunan bait.
-
Deserialisasi paket: Gunakan pengepala dari langkah 2 untuk menentukan kaedah penyahserikatan yang sesuai dan gunakannya pada tatasusunan bait dari langkah 3.
Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasikan Struktur yang Diterima Melalui TCP dengan betul dalam C# dan Elakkan SafeArrayTypeMismatchException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!