Sie haben den Unterschied zwischen Client und Server kennengelernt, wie Sie einen Hostnamen in eine IP-Adresse auflösen und wie Sie eine Verbindung zu einem bestimmten Endpunkt herstellen. Zuvor haben Sie gelernt, wie Sie Daten über eine bestehende TCP-Verbindung senden und empfangen. In diesem Kurs werden wir all dies zusammenfassen und eine sehr einfache Client-Anwendung schreiben.
Unsere Kundenanwendung führt Folgendes aus:
1. Holen Sie sich den Hostnamen aus den Befehlszeilenparametern;
2. Lösen Sie den angegebenen Hostnamen in eine IP-Adresse auf;
3. Stellen Sie eine Verbindung zum HTTP-Port (80) der aufgelösten IP-Adresse her;
4. Senden Sie eine HTTP-GET-Anfrage;
5. Empfangen Sie HTTP Antwort und Ausgabe an die Standardausgabe;
6. Alle Vorgänge werden asynchron ausgeführt.
Der Einfachheit halber habe ich auf die Fehlerbehandlung verzichtet. Hier ist der vollständige Beispielcode:
#include <iostream>
#include <boost/asio.hpp>
namespace io = boost::asio;
namespace ip = io::ip;
using tcp = ip::tcp;
using error_code = boost::system::error_code;
using namespace std::placeholders;
class application
{
public:
application(io::io_context& io_context, std::string const& hostname)
: resolver(io_context)
, socket (io_context)
{
request = "GET / HTTP/1.1\n"
"Host: " + hostname + "\n"