سؤال

لذلك أنا بحاجة إلى طريقة ما للتحويل Protocol://URLorIP:Port سلسلة في سلسلة ip كثافة العمليات port كيف تفعل مثل هذا الشيء باستخدام Boost ASIO وBoost Regex؟أم أنه من الممكن - للحصول على IP باستخدام C++ نت ليب (مرشح التعزيز) - ملاحظة - لا نحتاج إلى اتصال طويل - IP فقط.

لذلك أستخدم حاليًا هذا الرمز للتحليل

#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;
}

ما الذي يجب علي إضافته إلى برنامجي الصغير لتحليل عنوان URL إلى IP؟

هل كانت مفيدة؟

المحلول

تذكر أنه قد يكون هناك عدة عناوين IP لأي اسم مضيف واحد، ويمنحك Boost مُكرِّرًا سيمر عبرها.

الاستخدام واضح إلى حد ما، أضف هذا من قبل return 0; من برنامجك:

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';

ولا تنسى #include <boost/asio.hpp>

اختبار المدى:

~ $ 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

ملاحظة:للإشارة، اتصلت

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top