Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menyahsiri Struct dengan Aman daripada Strim TCP Berawalan Panjang?

Bagaimana untuk Menyahsiri Struct dengan Aman daripada Strim TCP Berawalan Panjang?

DDD
Lepaskan: 2025-01-03 07:08:40
asal
548 orang telah melayarinya

How to Reliably Deserialize a Struct from a Length-Prefixed TCP Stream?

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:

  1. Baca 4 bait pertama (Panjang), tukar dan tetapkannya kepada pembolehubah integer.
  2. Baca bait seterusnya (Pengepala Data) dan simpannya dalam pembolehubah.
  3. Baca x bait ke dalam tatasusunan bait, dengan x ialah integer dari langkah 1.
  4. Gunakan Pengepala Data dari langkah 2 untuk menentukan perkara yang perlu dilakukan dengan data.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan