Ошибка отправки команды в Beanstalkd из telnet - PullRequest
0 голосов
/ 17 октября 2019

Когда я отправляю следующую последовательность через telnet, я получаю EXPECTED_CRLF:

$ telnet localhost 11300
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
put 0 0 1 4 
68 6f 6c 61
EXPECTED_CRLF
UNKNOWN_COMMAND

Я думал, что когда я нажму «Enter» внутри telnet, будет отправлено «CR LF» (https://www.freesoft.org/CIE/RFC/1123/31.htm)

Протокол Beanstalkd здесь: https://github.com/beanstalkd/beanstalkd/blob/master/doc/protocol.txt

Я пытался переключить crlf, как сказал @Alister Bulman, но это не сработало:

$ telnet
telnet> toggle crlf
Will send carriage returns as telnet <CR><LF>.
telnet> open localhost 11300
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
put 0 0 1 4
68 6f 6c 61
EXPECTED_CRLF
UNKNOWN_COMMAND

1 Ответ

0 голосов
/ 18 октября 2019

Проблема заключалась в следующем: вы можете отправить текст, не кодируя его в байтах. Для текста "hola" правы 4 байта, но для "68 6f 6c 61" должна быть длина "11" байтов. Я неправильно понял протокол, поскольку он описывается как «последовательность байтов» для <data>. Действительно, доставка по TCP - это поток байтов!

- <data> is the job body -- a sequence of bytes of length <bytes> from the previous line.

Итак, правильные команды:

$ telnet
telnet> open localhost 11300
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
put 0 0 1 4
hola
INSERTED 1
put 0 0 1 11
68 6f 6c 61
INSERTED 2
...