#include <iostream>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
int main() {
try {
boost::asio::io_context io_context;
// 创建一个socket对象
tcp::socket socket(io_context);
// 定义服务器的IP地址和端口
tcp::resolver resolver(io_context);
tcp::resolver::results_type endpoints = resolver.resolve("example.com", "80");
// 连接到服务器
boost::asio::connect(socket, endpoints);
// 发送HTTP请求
std::string request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
boost::asio::write(socket, boost::asio::buffer(request));
// 接收服务器响应
boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");
// 读取响应数据
std::istream response_stream(&response);
std::string http_version;
response_stream >> http_version;
unsigned int status_code;
response_stream >> status_code;
std::string status_message;
std::getline(response_stream, status_message);
// 输出响应结果
if (!response_stream || http_version.substr(0, 5) != "HTTP/") {
std::cout << "Invalid response received.\n";
return 1;
}
std::cout << "Response returned with status code " << status_code << "\n";
// 读取剩余的响应头
std::string header;
while (std::getline(response_stream, header) && header != "\r") {
std::cout << header << "\n";
}
std::cout << "\n";
// 读取响应体
std::ostringstream body;
body << &response;
std::cout << body.str() << "\n";
} catch (std::exception& e) {
std::cerr << "Exception: " << e.what() << "\n";
}
return 0;
}
这段代码展示了如何使用 Boost.Asio
库进行网络编程,具体来说是通过TCP协议与远程服务器通信并发送HTTP请求。以下是代码的主要部分解释:
引入必要的头文件:
#include <iostream>
:用于标准输入输出。#include <boost/asio.hpp>
:引入Boost.Asio库。创建IO上下文:
boost::asio::io_context io_context;
:这是所有异步操作的核心,负责管理事件循环。创建Socket对象:
tcp::socket socket(io_context);
:创建一个TCP套接字对象。解析服务器地址:
tcp::resolver
来解析目标服务器的域名和端口号,返回一系列可以连接的端点。连接到服务器:
boost::asio::connect(socket, endpoints);
:尝试连接到服务器。发送HTTP请求:
接收服务器响应:
boost::asio::read_until
读取响应,直到遇到换行符 \r\n
。解析响应:
读取响应头和响应体:
异常处理:
此示例代码演示了如何使用C++进行简单的HTTP请求和响应处理,适用于学习网络编程的基础知识。
上一篇:c++map的使用
下一篇:c++ &运算
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站