Обробка двійкових потоків - Пакети

M

mhamini

Guest
Я намагаюся обробити потік бітів даних, які, як це відбувається приходить в через послідовний порт.Даних здійснюється у формі кілька типів пакетів, і я хочу просто розширює основи для обробки і додати кілька типів пакетів.
Для спрощеної приклад, який я зробив, ось приклад рішення ...

# Включити <fstream>
# Включити <iostream>

з використанням імен:: зЬй;

/ / Пакет формату 0x33, 0x44, [Packtype], [даних], [даних], [дані]
/ / Трохи фіктивними даними на передній і задній

непідписані символ даних [] = (0x11, 0x23, 0x34, 0x33, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x32, 0x45, 0x33, 0x44, 0x02, 0x12, 0x54, 0xA1, 0xBC, 0x11);

класу Pack1
(
громадськості:
сЬаг даними [3];
);

класу Pack2
(
громадськості:
сЬаг даних [5];
);

WriteData недійсними ()
(
ofstream OFS ("test.dat", IOS:: бінарний);

ofs.write ((символ *) і дані, sizeof (дані));
)

п ()
(
символ с;
Int заголовок = 0;

/ / WriteData ();
геат "якщо" ("test.dat", IOS:: бінарний);

а (ifs.get (с)) (
якщо ((заголовок == 0) і і (з == 0x33)) (/ / отримали першу частину заголовка пакету
символ D = ifs.peek ();
якщо (р == 0x44) (
ifs.get (); / / Отримання і відкинути 2ns байт заголовка
заголовок = 1;

/ / З'ясувати, який пакет
з = ifs.peek ();
якщо (з == 0x01) (
суд <<"Got Pack1" <<епсІ;
Pack1 р1;

ifs.read ((символ *) і p1, sizeof (p1));
заголовок = 0;
) Останнє, якщо (з == 0x02) (
суд <<"Got Pack2" <<епсІ;
Pack2 Р2;

ifs.read ((символ *) і р2, sizeof (Р2));
заголовок = 0;
)
)
)
)

повернення 0;
)

Дає ....

Got Pack1
Got pack2

Для мене це виглядає дуже непривабливо спосіб зробити це.Безумовно, є деякі корисні інкапсулірованние спосіб визначення та перевірки пакетів, які ми отримали.Я шукаю консультації за найкращою мишоловці це зробити.Хто-небудь є фрагменти коду, які могли б допомогти?Як фундаментальних систем цьому є обробки повідомлень TCPIP, безумовно, це вишуканий, щоб прекрасне рішення.

 
виступаючи продуктивності мудрий, він багато в чому залежить в здійсненні потік класи зокрема компілятор.

Виходячи з мого власного досвіду з великий потік обробки файлів (динамічно редагувати "на льоту").Краще використовувати свої власні "відображаються в пам'ять файлів" реалізації.Ця пам'ять відображається файл здійснюється в рамках win32API за допомогою функції CreateFile (з правом параметрів, звичайно).

Я знаю, що це не має прямої відповіді на своє запитання, але я думаю, що це добре для розгляду

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Підморгувати" border="0" />

.

 

Welcome to EDABoard.com

Sponsor

Back
Top