Сабж. В RedHat 7.2. Прога должна пересылать telnet-серверу то, что получает из командной строки, плюс символы конца строки. Сервер воспримет это как имя некоторой проги, запустит её и отправит её консольный вывод клиенту. Клиент, соответственно, должен принять этот вывод и, гм, вывести его в свою консоль. После того, как вывод закончен, прога-клиент должна закончить работу. Вопрос: как определить, что вывод той удалённо запущенной проги уже закончен? Проверять размер принятых данных не получилось, так как функция recv может вернуть -1 и ошибку EWOULDBLOCK как в середине приёма, так и в конце.
Очень познавательно. И каким же боком он в этой теме? С сервера этот символ не приходит. P.s. Сервер не линуховый, и машина, на которой он крутится, не PC. А вот клиент как раз на PC. Может, стандартный telnetd что-то такое и посылает, но этот - нет.
Извиняюсь, решил что ты пишешь и клиент и сервер. В твоём случае всё зависит от сервера - если он никак не уведомляет о завершении программы/вывода, то это плохо. Хотя можно использовать timeout(от последнего получения) - но это значительно увеличит время работы клиента, да и в некоторых случаях может сработать некоректно.
Верно, он вообще никак не уведомляет о завершении, так как посылает только текст. Никаких сообщений типа Go Ahead и прочих команд телнета. С таймаутом же дело обстоит именно так, как ты сказал...
Гм... ещё можно попробовать послать серверу команду с предсказуемым результатом(date,time,etc. - что там на сервере есть): т.е. пришел ответ на вторую команду - первая завершена. Но это уже алхимия :-(
у меня вопрос... ну просто мне любопытно, а зачем клиенту знать, что программа завершена? Ведь как я понимаю обычно происходит, клиент стучится к серверу и говорит "запусти-ка мне login", и после этого работает, пока соединение не убьётся. Или я в чём-то не прав?