Для проекта мне нужно читать ответы mDNS.
Я прочитал документ IETF (и tcpguide, который содержит много схемы), и я думаю, что уважаю их, но у меня есть проблема.
Часто я пытаюсь прочитать свой поток, но поток слишком короткий для данных, которые я пытаюсь прочитать.
У меня было несколько случаев, и я думаю, что что-то упускаю.
Один конкретный пример: я получаю это (я сделал небольшой «парсер ответов», чтобы увидеть, что я получаю, и «декодировать» его:
0000000000000000 0 ID
1 True IsResponse
0000 0 Opcode
1 True Authoritative
0 False Truncation
0 False Recursion desired
0 False Recursion available
000 000 Zero
0000 0 RCode
0000000000000000 0 Question count
0000000000000100 4 Answers count
0000000000000000 0 Authority count
0000000000000000 0 Additional count
Answers:
00001001 9 Size
01011111 _
01110011 s
01100101 e
01110010 r
01110110 v
01101001 i
01100011 c
01100101 e
01110011 s
00000111 7 Size
01011111 _
01100100 d
01101110 n
01110011 s
00101101 -
01110011 s
01100100 d
00000100 4 Size
01011111 _
01110101 u
01100100 d
01110000 p
00000101 5 Size
01101100 l
01101111 o
01100011 c
01100001 a
01101100 l
00000000 0 Size
00000000 0 Size
00001100 12 Size
00000000
00000001 ?
00000000
00000000
00011100 ?
00100000
00000000
00010111 ?
00001111 ¤
01011111 _
01110000 p
01100100 d
01101100 108 Size
00101101 -
01100100 d
01100001 a
01110100 t
01100001 a
01110011 s
01110100 t
01110010 r
01100101 e
01100001 a
01101101 m
00000100 ?
01011111 _
01110100 t
01100011 c
01110000 p
11000000 ?
00100011 #
11000000 ?
00001100 ?
00000000
00001100 ?
00000000
00000001 ?
00000000
00000000
00011100 ?
00100000
00000000
00001011 ?
00001000
01011111 _
01110000 p
01110010 r
01101001 i
01101110 n
01110100 t
01100101 e
01110010 r
11000000 ?
01000100 D
11000000 ?
00001100 ?
00000000
00001100 ?
00000000
00000001 ?
00000000
00000000
00011100 ?
00100000
00000000
00000111
00000100 ?
01011111 _
01101001 i
01110000 p
01110000 p
11000000 ?
01000100 D
11000000 ?
00001100 ?
00000000
00001100 ?
00000000
00000001 ?
00000000
00000000
00011100 ?
00100000
00000000
00001000
00000101 ?
01011111 _
01101000 h
01110100 t
01110100 t
01110000 p
11000000 ?
01000100 D
out of range out of range
out of range out of range
[...]
Я не понимаю, почему у меня недостаточно данных здесь. Бит усечения установлен на false, поэтому я должен иметь все данные в этом пакете, 01101100
на самом деле означает размер 108, а здесь у меня всего ~75 байт. Так что я делаю неправильно? Эта проблема чаще всего возникает с пакетами, содержащими ответы.