2010-10-14 10 views
0

La documentation de Boost.asio ne supporte pas les exemples ftp.comment résoudre le site FTP en utilisant boost.asio?

`boost::asio::io_service io_service; 
tcp::resolver resolver(io_service); 
tcp::resolver::query query("www.boost.org", "http"); 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);` 

qui résout le site http et d'obtenir un point de terminaison HTTP.

mais tcp::resolver::query query("ftp://ftp.remotesensing.org/gdal/", "ftp");

qui donnent un hôte non trouvé erreur. Alors, comment résoudre un site ftp.

+0

@ user474025: Votre question est résolu maintenant? Si oui, veuillez accepter la réponse. Je vous remercie. – usta

Répondre

2

Pour que vous avez encore le ftp: // dans votre nom d'hôte, AFAIR votre nom d'hôte doit être "ftp.remotesensing.org"

#include "stdafx.h" 

#include <iostream> 
#include <boost/asio.hpp> 

using namespace boost::asio::ip; 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    try 
    { 

    boost::asio::io_service io_service; 
    tcp::resolver resolver(io_service); 

    tcp::resolver::query query("ftp.remotesensing.org", "ftp"); 
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
    tcp::resolver::iterator end; 
    // Try each endpoint until we successfully establish a connection. 
    tcp::socket socket(io_service); 
    boost::system::error_code error = boost::asio::error::host_not_found; 
    while (error && endpoint_iterator != end) 
    { 
     socket.close(); 
     socket.connect(*endpoint_iterator++, error); 
    } 

    if (!error) 
    { 
     cout << "socket connected: " << socket.is_open() << endl; 
     // Read the response status line. The response streambuf will automatically 
     // grow to accommodate the entire line. The growth may be limited by passing 
     // a maximum size to the streambuf constructor. 
     boost::asio::streambuf response; 
     boost::asio::read_until(socket, response, "\r\n"); 

     std::istream response_stream(&response); 
     std::string sResponse; 
     while (!response_stream.eof()) 
     { 
     response_stream >> sResponse; 
     cout << sResponse << " "; 
     } 
    } 
    else 
    { 
     cout << "Error: " << error.message() << endl; 
    } 

    }catch(std::exception& e) 
    { 
    std::cout << e.what() << std::endl; 
    } 

    return 0; 
} 
+0

J'ai essayé cela, mais j'ai aussi obtenu une erreur HOST NOT FOUND. Je me demande si c'est la bonne solution. – leo

+0

Le programme ci-dessus donne la sortie suivante: "socket connected: 1 220 (vsFTPd 2.0.7) 2.0.7)" – Ralf

+0

Cela fonctionne. Merci. – leo

Questions connexes