Проблема с telnet
- Войдите на сайт для отправки комментариев
Ср, 19/03/2014 - 17:20
Всем привет! Создаю телнет сервер на базе ардуино и столкнулся с одной проблемой, надеюсь кто-нибудь поможет ее решить.
Суть вод в чем, когда клиент вводит пароль в введенной строке непонятно откуда появляются посторонние символы:
Хотя в мониторе порта все отображается нормально.
Вот как считываю символы:
while (passwordCharsReceived < 6 && client.connected()) { c = client.read(); if (c != -1) { if (c == '\r') continue; if (c == '\n') break; authBuffer[passwordCharsReceived] = c; } else delay(10); Serial.print( authBuffer[passwordCharsReceived] ); passwordCharsReceived++;
1. настолько маленькие картинки, что чем "нормально" отличается от "лишние символы" непонятно
2. где конец цикла while? нет закрывающей скобки
Может дело и не в этом, но у вас, если c == -1, в Serial выплюнется мусор, который был в буфере и индекс + 1.
Я бы переместил строки 11, 12 и перед 8 строкой
Не стесняйтесь в среде нажимать Ctrl-T, тогда и текст скетчас будет приятней, а не это нагромождение
Извиняюсь за плохой скрин, вот увеличенная версия:
По коду в терминал после ввода пароля выводится он же, это видно по коду:
Последние символы в пароле заменяются какими-то непонятными знаками, а монитор порта выводятся нормальные символы.
Из-за этого не могу организовать нормальную аунтефикацию.
чего-то я логику не до конца понимаю, зачем вводить 8 символов, а считывать 6? какой тип у authBuffer?
и 9-я строчка лишняя
Действительно, 9 строчка осталась от старых попыток и здесь не имеет значения. authBuffer и authData - массивы символов (char) с размерностью 6. Считывается не 8 символов, а 2 раза по 4, это происходит из-за того, что пользователю дано 3 попытки на ввод пароля (перед каждой попыткой client.flush()). В мониторе порта показаны 2 попытки ввода без разделения. Единственный вопрос, почему в монитор порта и в терминал выводятся разные символы.
Я Вам пример показал в сообщении #2, как надо сделать, но Вы его не заметили
http://arduino.ru/forum/programmirovanie/problema-s-telnet#comment-61183
Попробуйте
да, не 8, я и писал, что не 8, а 6. яснее не стало - вводите 4, считываете 6
Я Вам пример показал в сообщении #2, как надо сделать, но Вы его не заметили
http://arduino.ru/forum/programmirovanie/problema-s-telnet#comment-61183
Попробуйте
Извините, что не отписал, но ваш вариант не сработал. Теперь в терминал выплевывается абсолютный бред:
Такое просто не возможно, ведь размер строки пароля ограничен 6 символами.
Бывает и такой вариант:
Мне кажется, от этого не должно зависить, ведь в цикле есть условие:
а вы думаете, что если поменяете первые 4 символа в строке char buffer[6], то она автоматически станет короче на два символа? а вот и нет! я же не зря написал, что надо в конце '\0' записывать
Огромное спасибо! Я понял вас и все встало на свои места. Все работает!
ура!
:)
Как-то я не подумал, что концу строки неоткуда взяться. Еще раз спасибо за наводку, теперь продолжу разработку)