가장 쉬운 해결책은 2 개의 연결을 열 수 있습니다.
하나의 포트/연결은 제어 명령 (메타 데이터) 용이고 다른 연결은 데이터 용입니다.
2 개의 연결을 사용할 수없는 경우 데이터를 "메시지"로 나눌 수 있습니다.
각 메시지에는 메시지 헤드와 메시지 본문이 있습니다. 메시지 헤드에는 다음 필드가 포함되어 있습니다. (= 몸의 바이트 수 다음 메시지의 시작 부분 식별하는 데 필요한)
- 메시지 바디 길이를
- 메시지 유형 (도주를 구별하기를 및 실제 데이터와 같은 시퀀스)
메시지 헤드의 길이가 알려져있는 이유 때문에 수신자는 수신되는 데이터의 유형을 항상 알고 있습니다. 그러나 헤더에 일종의 체크섬 필드를 추가해야합니다. 그냥 특별한 바이트를 정의
탈출
는
(예. 0x00
)는 이스케이프 문자가 될 수 있습니다. 이스케이프 시퀀스 (ESC STX
)를 전송할 때마다이 바이트를 보내기 전에 전송합니다.
그러나 데이터를 0x00
으로 보내려면 두 번 보내야합니다. 수신기는 일부 교체에에 있습니다
0x00
가 0x00
다음에 -> 더 이스케이프 시퀀스. 1 바이트를 제거하면 모든 것이 정상입니다.
0x00
다음에 다른 바이트가 오는 경우 0x00
바이트를 제거하십시오. 두 번째 바이트는 이스케이프 시퀀스이며 특별한 의미가 있습니다.
프로토콜 버퍼 또는 다른 인코딩 체계를 살펴보십시오. 길이 인코딩 값 및 유사한 인코딩에 대해서는 위키피디아를 참고하십시오. – Soren
"이제 길이가 X 인 데이터를 보냅니다"와 X 바이트 길이의 데이터 . – nwp
이스케이프 시퀀스가 페이로드에 나타날 때 이스케이프 시퀀스가 이스케이프 처리 된 이유입니다 (대개 0x25 사용). –