2013-05-08 2 views
0

들어오는 UDP 패킷을 수신하는 응용 프로그램을 작성 중입니다. 다양한 종류의 패킷을받을 가능성이 있습니다. 예를 들어, 패킷은 다음과 같이 정의 될 수 있습니다.C 여러 유형의 UDP 패킷 처리

패키지 A : | int a | char b | int c |

패키지 B : | 짧은 int d | int e | char f |

등.

여러 가지 유형의 메시지를 받는다는 점을 감안할 때, 내가 읽고있는 내용과 함께 보내지는 것을 조정하는 좋은 방법은 무엇인가?

각 메시지의 시작 부분에 "헤더"를 추가하여 유형을 정의하거나 각 패킷의 크기를 알고있는 경우 메시지 길이를 읽고 나와 목록과 비교할 수 있습니다 .

또한 나중에 옵션 인 경우 패킷이 매번 예상 된 길이가되도록 보장됩니까?

편집 : 단지 문제가 될 수있는 패킷 길이를 사용하는 경우 같은 길이의 여러 메시지 유형이있을 수 있기 때문에 나는 또한 볼 수 있습니다

.

+1

'recvmsg'를 호출 할 때마다 전체 패킷 하나가 반환됩니다 (버퍼가 클 경우). 따라서 버퍼가 가능한 모든 패킷을 다루는 한, 전송 된 정확한 패킷을받을 수 있습니다. 어떤 경우에도 유형 헤더가 필요합니다. –

답변

3

마법의 단어와 유형을 정의하는 코드가 포함 된 헤더를 사용하십시오. 그렇게하면 응용 프로그램에 적합하다는 것을 확신 할 수 있으며 사용할 올바른 구문 분석기를 식별 할 수 있습니다.

시퀀스 번호와 타임 스탬프는 손실 된 패킷과 순서가 잘못된 패킷을 검색하는 데 유용 할 수 있습니다. 이것은 UDP에서 발생하는 일반적인 문제입니다.