Pregunta

Entonces, ¿necesito una forma de tornear la cadena de generación Protocol://URLorIP:Port en la cadena ip int port ¿Cómo hacer tal cosa con BOOST ASIO y BOOST REGEX?O es posible, para obtener IP utilizando C ++ net lib (Boost Candidate) - Aviso - lo hacemosNo necesita conexión larga - solo IP.

Así que actualmente uso dicho código para analizar

#include <boost/regex.hpp>
#include <vector>
#include <string>

int main(int argc, char** argv)
{
    if (argc < 2) return 0;

    std::vector<std::string> values;
    boost::regex expression(
        //   proto                 host               port
        "^(\?:([^:/\?#]+)://)\?(\\w+[^/\?#:]*)(\?::(\\d+))\?"
        //   path                  file       parameters
        "(/\?(\?:[^\?#/]*/)*)\?([^\?#]*)\?(\\\?(.*))\?"
    );
    std::string src(argv[1]);
    if (boost::regex_split(std::back_inserter(values), src, expression))
    {
        const char* names[] = {"Protocol", "Host", "Port", "Path", "File", 
                "Parameters", NULL};
        for (int i = 0; names[i]; i++)
            printf("%s: %s\n", names[i], values[i].c_str());
    }
    return 0;
}

¿Qué agregaré a mi pequeño programa para analizar la URL en IP?

¿Fue útil?

Solución

Recuerde que puede haber múltiples direcciones IP para cualquier nombre de host, Boost le brinda un iterador que los atravará.

El uso es bastante sencillo, agregue esto antes de return 0; de su programa:

std::cout << "IP addresses: \n";
boost::asio::io_service io_service;
boost::asio::ip::tcp::resolver resolver(io_service);
boost::asio::ip::tcp::resolver::query query(values[1], "");
for(boost::asio::ip::tcp::resolver::iterator i = resolver.resolve(query);
                            i != boost::asio::ip::tcp::resolver::iterator();
                            ++i)
{
    boost::asio::ip::tcp::endpoint end = *i;
    std::cout << end.address() << ' ';
}
std::cout << '\n';

y no olvides #include <boost/asio.hpp>

Ejecución de la prueba:

~ $ g++ -g -Wall -Wextra -pedantic -Wconversion -ansi -o test test.cc -lboost_regex -lboost_system -lboost_thread
~ $ ./test http://www.google.com:7777
Protocol: http
Host: www.google.com
Port: 7777
Path:
File:
Parameters:
IP addresses:
74.125.226.179 74.125.226.176 74.125.226.178 74.125.226.177 74.125.226.180

PS: Para referencia, llamé

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top