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.
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.