Bagaimana untuk melaksanakan penstriman HTTP dalam C++? Cipta soket strim SSL menggunakan perpustakaan pelanggan Boost.Asio dan asiohttps. Sambung ke pelayan dan hantar permintaan HTTP. Terima pengepala respons HTTP dan cetaknya. Menerima badan respons HTTP dan mencetaknya.
Cara melaksanakan penstriman HTTP dalam C++
Pengenalan
Strim ialah kaedah menghantar data media dalam masa nyata melalui protokol HTTP. Ia membolehkan pelanggan menerima aliran data berterusan daripada pelayan tanpa menunggu keseluruhan muat turun fail selesai. Artikel ini menerangkan cara untuk melaksanakan penstriman HTTP dalam C++ menggunakan perpustakaan klien Boost.Asio dan asiohttps.
Sediakan
Kod
Berikut ialah kod untuk melaksanakan penstriman HTTP:
#include <boost/asio.hpp> #include <boost/asio/ssl.hpp> using namespace boost::asio; int main() { // 设置服务器地址和端口 std::string server_address = "example.com"; unsigned short server_port = 443; // 创建 IO 服务 io_service io_service; // 创建 SSL 上下文 ssl::context ctx{ssl::context::tlsv12_client}; // 创建 SSL 流套接字 ssl::stream<ip::tcp::socket> stream(io_service, ctx); // 连接到服务器 stream.lowest_layer().connect(ip::tcp::endpoint(ip::address::from_string(server_address), server_port)); // 发送 HTTP 请求 stream << "GET /stream.mp4 HTTP/1.1\r\n" << "Host: " << server_address << "\r\n" << "Connection: keep-alive\r\n" << "\r\n"; // 接收 HTTP 响应头 boost::system::error_code ec; std::string response_headers; for (;;) { response_headers += stream.read_some(buffer(response_headers), ec); if (ec || response_headers.find("\r\n\r\n") != std::string::npos) { break; } } if (ec) { throw std::runtime_error("Error receiving HTTP headers: " + ec.message()); } // 打印响应头 std::cout << response_headers << std::endl; // 接收 HTTP 响应正文 char buffer[1024]; size_t bytes_received = 0; while (bytes_received < std::numeric_limits<size_t>::max()) { bytes_received += stream.read_some(buffer(buffer, bytes_received), ec); if (ec || stream.eof()) { break; } } if (ec) { throw std::runtime_error("Error receiving HTTP content: " + ec.message()); } // 打印响应正文 std::cout << buffer << std::endl; return 0; }
Kes praktikal
Program ini boleh digunakan untuk menerima dan memainkan fail media penstriman daripada pelayan. Berikut ialah contoh memainkan fail penstriman yang dimuat turun daripada example.com:
g++ -std=c++11 -I/usr/local/include -L/usr/local/lib -lasio -lasiossl stream.cpp ./a.out > stream.mp4 mplayer stream.mp4
NOTA
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan penstriman HTTP menggunakan C++?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!