Perdirbimas Binary Srautai - Paketai

M

mhamini

Guest
Bandau procesas dvejetainiai duomenys, kurie, kaip tai atsitinka tai ateina per nuoseklųjį prievadą srauto.Duomenų, imtųsi kelių tipų paketų forma, ir aš noriu paprastų pratęsti sistemos tvarkymą ir įtraukti daugiau paketų rūšys.
Dėl oversimplified Pavyzdžiui aš padariau, čia yra mėginio tirpalo ...

# include <fstream>
# include <iostream>

using namespace: STD;

/ / packet formatas 0x33, 0x44, [Packtype], [data], [data], [data],
/ / tiek manekenas duomenis apie priekyje ir gale

unsigned char Data [] = (0x11, 0x23, 0x34, 0x33, 0x44, 0x01, 0x00, 0x00, 0x00, 0x00, 0x32, 0x45, 0x33, 0x44, 0x02, 0x12, 0x54, 0xA1, 0xBC, 0x11);

klasė Pack1
(
public:
char Data [3];
);

klasė Pack2
(
public:
char Data [5];
);

tuščia WriteData ()
(
ofstream OFS ( "test.dat", ios:: binary);

ofs.write ((char *) & duomenys, sizeof (duomenų));
)

int main ()
(
char c;
LC header = 0;

/ / WriteData ();
ifstream IFS ( "test.dat", ios:: binary);

while (ifs.get (c)) (
if ((header == 0) & & (c == 0x33)) (/ / gavome pirmąją dalį Pack antraštė
char d = ifs.peek ();
if (d == 0x44) (
ifs.get (); / / Gauti ir išmeskite 2ns antraštės baitas
header = 1;

/ / Find out kuris paketiniù
c = ifs.peek ();
if (c == 0x01) (
cout << "Got Pack1" <<endl;
Pack1 p1

ifs.read ((char *) & p1, sizeof (p1));
header = 0;
) Else if (c == 0x02) (
cout << "Got Pack2" <<endl;
Pack2 p2;

ifs.read ((char *) & p2, sizeof (p2));
header = 0;
)
)
)
)

return 0;
)

Duoda ....

Turite Pack1
Turite pack2

Man tai atrodo labai bjaurus būdas tai padaryti.Žinoma, yra tam tikrų Nice aplieti būdu apibrėžiant paketų ir tikrinimas, kuriuo mes turime.I'm looking for patarimus geriau pele gaudyklė tai padaryti.Ar kas nors turi tam tikrų kodo fragmentus, kurie galėtų padėti atlikti?Kaip pagrindines sistemas, tai padaryti ty perdirbimas TCPIP pranešimus, tikrai tai rafinuotas Nice tirpalas.

 
kalbėjimo rezultatais išmintingą, tai priklauso ir nuo srauto klasių įgyvendinimo daug savo pirma kompiliatorių.

Remdamasi savo patirtimi su dideliais failas srautas tvarkymas (dinamiškai kartą skristi).Geriau naudoti savo "atminties susieto failo" įgyvendinimą.Šis atminties susieto failo yra įgyvendinama per win32API naudojant CreateFile funkcija (su teise parametrų žinoma).

Aš žinau, tai ne tiesiogiai atsakyti į jūsų klausimą, bet manau, it's nice už atlygį

<img src="http://www.edaboard.com/images/smiles/icon_wink.gif" alt="Mirkčiojimai" border="0" />

.

 

Welcome to EDABoard.com

Sponsor

Back
Top