Чтобы написать веб-сервер на C++, вы можете использовать библиотеку libmicrohttpd. Вот пример того, как создать простой веб-сервер, который отвечает на все запросы одним и тем же сообщением:

#include <iostream>
#include <microhttpd.h>
// The response to send to the client
const char *response = "Hello, world!\n";

// The callback function that will handle incoming requests
int handle_request(void *, MHD_Connection *connection, const char *, const char *, const char *, const char *, size_t *, void **) {
  // Create a response object
  MHD_Response *res = MHD_create_response_from_buffer(strlen(response), (void*)response, MHD_RESPMEM_MUST_COPY);
  // Queue the response for sending
  int ret = MHD_queue_response(connection, MHD_HTTP_OK, res);
  // Clean up
  MHD_destroy_response(res);
  return ret;
}

int main() {
  // Create a new web server
  MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_THREAD_PER_CONNECTION, 8080, nullptr, nullptr, &handle_request, nullptr, MHD_OPTION_END);
  if (!daemon) {
    // If the server couldn't be started, print an error message and exit
    std::cerr << "Failed to start the server!" << std::endl;
    return 1;
  }
  // Wait for the user to press enter
  std::cout << "Server is running on port 8080. Press enter to quit." << std::endl;
  std::cin.get();
  // Stop the server
  MHD_stop_daemon(daemon);
  return 0;
}

В этом примере мы используем функцию MHD_start_daemon() для создания нового веб-сервера и функцию MHD_queue_response() для постановки ответа в очередь для отправки клиенту. Мы также используем функцию MHD_stop_daemon() для остановки сервера, когда пользователь нажимает ввод.

Вы можете использовать аналогичный подход для обработки разных типов запросов и отправки разных ответов на основе данных запроса. Обратитесь к документации libmicrohttpd для получения дополнительной информации.