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();
C++ telnet через libcurl
Уже второй день не удается решить такую проблему. Необходимо сделать небольшой telnet-клиент, используя libcurl.
В случае, если код выглядит так:
Код:
То действительно устанавливается соединение, 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);
...
curl_easy_setopt(curl,CURLOPT_PROTOCOLS, &protocol);
То получаю ошибку "неопознанный протокол". Несмотря на то, что я скачал уже готовую dll для Win, которая должна включать в себя поддержку всех протоколов.
На сайте что-то говорится про использование STDERR, но я так и не нашел ничего про это. Может быть у кого-то есть рабочая версия?
Мне, собственно, надо соединиться, отправить логин, пароль, специальную команду, получить на нее ответ и отсоединиться.
Сейчас реализовал это через Indy IdTelnet, однако этот странный компонент отказывается "слышать" свои события в случае, если он не является частью формы, запущенной через Application->Run, что полностью корежит мою архитектуру и элегантную транспортную задачу превращает в уродца, с которым работать в дальнейшем будет невозможно.
Подскажите пожалуйста решение через curl, очевидно мануала мне не хватило по нему, потому что его надо знать: а значит нужен какой-то толковый пример с ним, работающий именно через telnet.