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 ()
(
OFS ofstream ( "test.dat", 개조 : : 바이너리);
ofs.write ((숯불 *) & 데이터, sizeof (데이터));
)
주요 int ()
(
숯불 C;
헤더 int = 0;
/ / WriteData ();
IFS는 ifstream ( "test.dat", 개조 : : 바이너리);
반면 (ifs.get (C)) (
만약 ((헤더 == 0) & & (C == 0x33)) (/ / 헤더 팩을의 첫 부분을 가지고
숯불 D 조 = ifs.peek ();
(d 개의 == 0x44) (경우
ifs.get (); / / Get 및 2ns 헤더 바이트를 버리고
헤더 = 1;
/ / 어떤 패킷을 찾을 수
C = ifs.peek ();
(C == 0x01) (경우
법원 "" "Pack1" ""endl어요;
Pack1 P1과;
ifs.read ((숯불 *) & P1과, sizeof (P1과));
헤더 = 0;
) 다른 경우에는 (C == 0x02) (
법원 "" "Pack2" ""endl어요;
Pack2 p2;
ifs.read ((숯불 *) & p2, sizeof (p2));
헤더 = 0;
)
)
)
)
반환 0;
)
부여 ....
Pack1어요
pack2어요
제가보기에는 이것이 짓을 아주 못생긴 방법처럼 보인다.분명히 거기에 패킷을 확인하고있어 우리는 정의의 일부 캡슐 좋은 방법입니다.난 더 나은 쥐덫에 이렇게 조언을 찾고 있어요.누구, 저 좀 도와 수있는 코드의 일부 미리보기 있나요?근본적인 시스템이 어떻게 처리 TCPIP 즉, 메시지가 뭐, 틀림없이이 좋은 솔루션 정제된입니다.
내가 만든 설명한 예를 들어, 샘플의 솔루션입니다 ...
# 포함 <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 ()
(
OFS ofstream ( "test.dat", 개조 : : 바이너리);
ofs.write ((숯불 *) & 데이터, sizeof (데이터));
)
주요 int ()
(
숯불 C;
헤더 int = 0;
/ / WriteData ();
IFS는 ifstream ( "test.dat", 개조 : : 바이너리);
반면 (ifs.get (C)) (
만약 ((헤더 == 0) & & (C == 0x33)) (/ / 헤더 팩을의 첫 부분을 가지고
숯불 D 조 = ifs.peek ();
(d 개의 == 0x44) (경우
ifs.get (); / / Get 및 2ns 헤더 바이트를 버리고
헤더 = 1;
/ / 어떤 패킷을 찾을 수
C = ifs.peek ();
(C == 0x01) (경우
법원 "" "Pack1" ""endl어요;
Pack1 P1과;
ifs.read ((숯불 *) & P1과, sizeof (P1과));
헤더 = 0;
) 다른 경우에는 (C == 0x02) (
법원 "" "Pack2" ""endl어요;
Pack2 p2;
ifs.read ((숯불 *) & p2, sizeof (p2));
헤더 = 0;
)
)
)
)
반환 0;
)
부여 ....
Pack1어요
pack2어요
제가보기에는 이것이 짓을 아주 못생긴 방법처럼 보인다.분명히 거기에 패킷을 확인하고있어 우리는 정의의 일부 캡슐 좋은 방법입니다.난 더 나은 쥐덫에 이렇게 조언을 찾고 있어요.누구, 저 좀 도와 수있는 코드의 일부 미리보기 있나요?근본적인 시스템이 어떻게 처리 TCPIP 즉, 메시지가 뭐, 틀림없이이 좋은 솔루션 정제된입니다.