Kann leider nicht wirklich verstehen, was die Parameter für den Aufbau tcp :: Resolver :: Abfrage

StackOverflow https://stackoverflow.com/questions/551226

  •  23-08-2019
  •  | 
  •  

Frage

Ich Boost.Asio bin ab und zu versuchen, Beispiele auf der offiziellen Webseite Arbeit gegeben zu machen.
Hier `s Client-Code:


using boost::asio::ip::tcp;

int _tmain(int argc, _TCHAR* argv[])
{
    try {
        boost::asio::io_service io_service;

        tcp::resolver resolver(io_service);
        tcp::resolver::query query(argv[1], "daytime");
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;

        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)
            throw boost::system::system_error(error);

        for(;;) {
            boost::array buf;
            boost::system::error_code error;

            std::size_t len = socket.read_some(boost::asio::buffer(buf), error);

            if (error == boost::asio::error::eof)
                break; //connection closed cleanly by peer
            else if (error)
                throw boost::system::system_error(error);

            std::cout.write(buf.data(), len);
        }
    }
    catch(std::exception& e) {
        //...
    }
    return 0;
}

Die Frage ist - ich kann nicht herausfinden, was die Parameter Programm von Eingabeaufforderung auszuführen wären

?
War es hilfreich?

Lösung

Sie würden das Programm mit der IP-Adresse oder Hostname des Servers führen Sie eine Verbindung herstellen möchten. tcp :: Resolver :: Abfrage führt den Hosts aufzulösen oder die IP als ersten Parameter und den Namen des Dienstes (wie definiert zB in / etc / services auf Unix-Rechner) - Sie können auch einen numerischen Dienstkennung (auch bekannt als Port verwenden Nummer). Es gibt eine Liste von möglichen Endpunkten, da es mehrere Einträge für einen einzelnen Host sein könnte.

Andere Tipps

Lesen Sie altes Handbuch!

ip::tcp::resolver resolver(my_io_service);
ip::tcp::resolver::query query("www.boost.org", "http");
ip::tcp::resolver::iterator iter = resolver.resolve(query);
ip::tcp::resolver::iterator end; // End marker.
while (iter != end)
{
    ip::tcp::endpoint endpoint = *iter++;
    std::cout << endpoint << std::endl;
}

http: // www. boost.org/doc/libs/1_38_0/doc/html/boost_asio/overview/networking/protocols.html

Ich hatte das gleiche Problem jetzt (mit dem gleichen Tutorial). Ändern Sie den Server-Code zu:

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 19876));

und den Client-Code ändern:

tcp::resolver::query query(argv[1], "19876");

die gleichen Servicearbeiten an einem anderen Port zu machen.

Wenn ich nicht irre, Sie versuchen, UNICODE-String zu verwenden - TCHAR. Mit Standard

int main(int argc,char **argv)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top