Что касается RFC TFTP (простой протокол передачи файлов), пакет RRQ/WRQ (запросы на чтение\запись) имеет следующий формат:
2 bytes string 1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------
Режим может быть netascii, octet (эквивалентен двоичному) или mail. Дело в том, что в netascii 8 букв, в октете 5, а в mail 4.
Я создаю свой пакет в своем клиенте следующим образом:
paq = struct.pack('!H'+str(len(fileName))+'sB'+str(len(mode))+'sB', 02, fileName, 0, mode, 0)
Затем я отправляю пакет на сервер, чтобы сервер знал, чего ожидать (чтение в случае RRQ или запись в противном случае).
Дело в том, что я не знаю, как распаковать пакет, если я не знаю длины строк на стороне сервера... Только клиент знает длину файла и длину режима, так как он делает пакет.
Должен ли я отправлять длины на сервер перед пакетом RRQ/WRQ, чтобы знать формат, который следует использовать при распаковке? Есть ли другой способ?
Спасибо!
0
байтом. Найдите этот байт, а затем извлеките строку до него. - person Barmar   schedule 23.05.2018unpack()
для извлечения полей, кроме Opcode. - person Barmar   schedule 23.05.2018binari
? Я ожидаю, что это будетbinary
, так как разработчики TFTP говорили по-английски. - person Barmar   schedule 23.05.2018p
,p[2:p.find('\0')]
- это имя файла - person Barmar   schedule 23.05.2018