Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ telnet через libcurl

1.8K
17 ноября 2010 года
Arkady
153 / / 18.12.2007
Приветствую,

Уже второй день не удается решить такую проблему. Необходимо сделать небольшой telnet-клиент, используя libcurl.

В случае, если код выглядит так:
Код:
CURL *curl;
  CURLcode res;
  size_t n;

  int sockfd;

  curl_global_init(CURL_GLOBAL_ALL);
  curl = curl_easy_init();

  if(curl)
  {
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
    curl_easy_setopt(curl,CURLOPT_URL, "XX.XX.XX.XX");
    curl_easy_setopt(curl, CURLOPT_PORT, 23);
    curl_easy_setopt(curl,CURLOPT_CONNECT_ONLY, 1L);
    res = curl_easy_perform(curl);

    res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);

    curl_easy_send(curl, "Admin", 6, &n);

    curl_slist_free_all (headerlist);
    curl_easy_cleanup(curl);
  }
  curl_global_cleanup();

То действительно устанавливается соединение, res == CURL_OK, действительно создается какой-то сокет и его номер возвращается в sockfd, действительно на сервер шлется Admin (по крайней мере в n - возвращает, что отправлено 5 байт.
Однако никакого соединения при этом нет, сервер не запрашивает ни логин, ни пароль, функция read_callback не вызывается ни разу.

В случае, если в качестве адреса я указываю не "XX.XX.XX.XX", а "telnet:////XX.XX.XX.XX" (именно так рекомендуют делать на сайте curl), то либа некоторое время думает и выдает, что соединения нет.

В случае, если я добавляю в код, приведенный выше, следующие строки:
 
Код:
long protocol = CURLPROTO_TELNET;
  ...  
  curl_easy_setopt(curl,CURLOPT_PROTOCOLS, &protocol);

То получаю ошибку "неопознанный протокол". Несмотря на то, что я скачал уже готовую dll для Win, которая должна включать в себя поддержку всех протоколов.

На сайте что-то говорится про использование STDERR, но я так и не нашел ничего про это. Может быть у кого-то есть рабочая версия?

Мне, собственно, надо соединиться, отправить логин, пароль, специальную команду, получить на нее ответ и отсоединиться.

Сейчас реализовал это через Indy IdTelnet, однако этот странный компонент отказывается "слышать" свои события в случае, если он не является частью формы, запущенной через Application->Run, что полностью корежит мою архитектуру и элегантную транспортную задачу превращает в уродца, с которым работать в дальнейшем будет невозможно.
Подскажите пожалуйста решение через curl, очевидно мануала мне не хватило по нему, потому что его надо знать: а значит нужен какой-то толковый пример с ним, работающий именно через telnet.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог