【发布时间】:2014-04-22 09:27:05
【问题描述】:
我正在尝试使用 Boost.Asio 编写一个非常简单的 HTTP 服务器。这是代码(与 Boost.Asio 教程中的示例几乎相同)
#include <iostream>
#include <string>
#include <boost/asio.hpp>
#include <thread>
#include <chrono>
using boost::asio::ip::tcp;
int main()
{
try
{
boost::asio::io_service io_service;
tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 12345));
for (;;)
{
tcp::socket socket(io_service);
acceptor.accept(socket);
const char message[] = "HTTP/1.0 200 OK\r\n\r\n<html><body><i>Hello, world</i></body></html>";
boost::system::error_code ignored_error;
boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
}
}
catch (std::exception& e)
{
std::cerr << e.what() << std::endl;
}
return 0;
}
当我运行此示例时,我尝试使用地址为 127.0.0.1:12345 的 Chrome,但它显示“此网页不可用”。但是如果我在调试器中一步一步地开始,它会正确显示斜体的“Hello, world”。事实上,如果我在写操作之后添加一行std::this_thread::sleep_for(std::chrono::seconds(1));,它就会正常工作。我究竟做错了什么?有没有办法避免这种丑陋的黑客攻击?
我在 Windows 7 上使用 Visual Studio 2013。编译为 64 位代码。
【问题讨论】:
-
明天再来,你会得到答案:)
标签: c++ networking boost boost-asio