我正在尝试使用boost :: asio从TCP连接读取已定义的字节数,但是asio不接受我给它的句柄。
#include <boost/asio.hpp>
int main(){
int port = 2222;
boost::asio::io_service io_service_;
boost::asio::ip::tcp::acceptor acceptor_(io_service_, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
char packet_type[4];
boost::asio::ip::tcp::socket socket_(io_service_);
acceptor_.async_accept(socket_, [&](boost::system::error_code ec){
boost::asio::async_read(socket_, boost::asio::buffer(packet_type, 4),
[](boost::system::error_code &ec, std::size_t N) // <- error
{
});
});
}
我得到的错误是:
error C2338: ReadHandler type requirements not met
: see reference to function template instantiation 'boost::asio::async_result<Handler>::type boost::asio::async_read<boost::asio::ip::tcp::socket,boost::asio::mutable_buffers_1,main::<lambda_3400466f101ccf7a8013d928754266a0>::()::<lambda_af1dbf92bb67c9e911b61eb3b897934f>>(AsyncReadStream &,const MutableBufferSequence &,ReadHandler &&)' being compiled
with
[
Handler=main::<lambda_3400466f101ccf7a8013d928754266a0>::()::<lambda_af1dbf92bb67c9e911b61eb3b897934f>,
AsyncReadStream=boost::asio::ip::tcp::socket,
MutableBufferSequence=boost::asio::mutable_buffers_1,
ReadHandler=main::<lambda_3400466f101ccf7a8013d928754266a0>::()::<lambda_af1dbf92bb67c9e911b61eb3b897934f>
]
如果我使用socket_.async_read_some(),它可以正常工作,但是因为我想要读取固定数量的字节,所以它不是很好。
答案 0 :(得分:3)
您不能通过可变引用获取错误代码:
[](boost::system::error_code ec, std::size_t N) {}
或
[](boost::system::error_code const& ec, std::size_t N) {}
<强> Live On Coliru 强>
#include <boost/asio.hpp>
#include <iostream>
int main(){
int port = 2222;
boost::asio::io_service io_service_;
boost::asio::ip::tcp::acceptor acceptor_(io_service_, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port));
char packet_type[4];
boost::asio::ip::tcp::socket socket_(io_service_);
acceptor_.async_accept(socket_, [&](boost::system::error_code ec){
boost::asio::async_read(socket_, boost::asio::buffer(packet_type, 4),
[&](boost::system::error_code ec, std::size_t N)
{
std::cout << "Received: '";
std::cout.write(packet_type, sizeof(packet_type)) << "'\n";
});
});
io_service_.run();
}
打印
g++ -std=c++11 -O2 -Wall -pedantic -pthread main.cpp -lboost_system -lboost_thread
./a.out& sleep 1; nc 127.0.0.1 2222 <<< halp
Received: 'halp'