【发布时间】:2021-01-25 09:57:20
【问题描述】:
我正在使用boost.asio 编写一个简单的服务器。下面的代码试图做两件事:
- 打印请求
- 回复客户
hello
但事实并非如此。
#include <iostream>
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
int main(){
try{
boost::asio::io_context ioc;
tcp::acceptor acceptor(ioc, tcp::endpoint(tcp::v4(), 1010));
for(;;){
tcp::socket socket(ioc);
acceptor.accept(socket);
boost::system::error_code err;
std::string buff;
socket.read_some(boost::asio::buffer(buff), err);
std::cout << buff << '\n';
boost::asio::write(socket, boost::asio::buffer("hello"),err);
}
}
catch (std::exception& e){
std::cerr << e.what() << '\n';
}
return 0;
}
当我运行服务器并使用curl 发送请求时,它没有响应,只打印一个空行。
[amirreza@localhost ~]$ curl 127.0.0.1:1010
curl: (1) Received HTTP/0.9 when not allowed
[amirreza@localhost ~]$
在服务器端(2个空行):
[amirreza@localhost 2]$ sudo ./server
[sudo] password for amirreza:
这里我有两个问题:
- 为什么服务器不打印 curl 请求?
- 为什么 curl 没有收到
hello消息?
我还观察到在wireshark 中服务器和curl 之间发送和接收的数据包。一开始会发生 tcp 握手,但是当 curl 发送 HTTP 请求时,服务器会响应一个带有 RST 标志的 tcp 数据包以重置连接。
【问题讨论】:
-
你永远不会检查
write()的返回值。这样做。 -
@JohnZwinck 我刚刚检查了
write()的返回值,是6,有帮助吗?
标签: c++ networking boost-asio