пытаюсь написать command-line telnet client

Тема в разделе "WASM.UNIX", создана пользователем Monsta, 11 фев 2005.

  1. Monsta

    Monsta New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    13
    Адрес:
    Москва
    Сабж. В RedHat 7.2.

    Прога должна пересылать telnet-серверу то, что получает из командной строки, плюс символы конца строки. Сервер воспримет это как имя некоторой проги, запустит её и отправит её консольный вывод клиенту. Клиент, соответственно, должен принять этот вывод и, гм, вывести его в свою консоль. После того, как вывод закончен, прога-клиент должна закончить работу.



    Вопрос: как определить, что вывод той удалённо запущенной проги уже закончен? Проверять размер принятых данных не получилось, так как функция recv может вернуть -1 и ошибку EWOULDBLOCK как в середине приёма, так и в конце.
     
  2. Qwer

    Qwer New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2005
    Сообщения:
    6
    Вообще-то есть такой символ конца файла

    в Линукс ctrl-D (^D) вроде... :derisive:
     
  3. Monsta

    Monsta New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    13
    Адрес:
    Москва
    Очень познавательно. И каким же боком он в этой теме? С сервера этот символ не приходит.



    P.s. Сервер не линуховый, и машина, на которой он крутится, не PC. А вот клиент как раз на PC. Может, стандартный telnetd что-то такое и посылает, но этот - нет.
     
  4. Qwer

    Qwer New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2005
    Сообщения:
    6
    Извиняюсь, решил что ты пишешь и клиент и сервер.

    В твоём случае всё зависит от сервера - если он никак не уведомляет о завершении программы/вывода, то это плохо. Хотя можно использовать timeout(от последнего получения) - но это значительно увеличит время работы клиента, да и в некоторых случаях может сработать некоректно.
     
  5. Monsta

    Monsta New Member

    Публикаций:
    0
    Регистрация:
    8 дек 2004
    Сообщения:
    13
    Адрес:
    Москва
    Верно, он вообще никак не уведомляет о завершении, так как посылает только текст. Никаких сообщений типа Go Ahead и прочих команд телнета. С таймаутом же дело обстоит именно так, как ты сказал...
     
  6. Qwer

    Qwer New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2005
    Сообщения:
    6
    Гм... ещё можно попробовать послать серверу команду с предсказуемым результатом(date,time,etc. - что там на сервере есть): т.е. пришел ответ на вторую команду - первая завершена. Но это уже алхимия :-(
     
  7. rgo

    rgo New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2005
    Сообщения:
    87
    у меня вопрос... ну просто мне любопытно, а зачем клиенту знать, что программа завершена? Ведь как я понимаю обычно происходит, клиент стучится к серверу и говорит "запусти-ка мне login", и после этого работает, пока соединение не убьётся. Или я в чём-то не прав?