Snažím sa čítať definovaný počet bajtov z TCP spojenia pomocou boost :: asio, ale asio neakceptuje rukoväť, ktorú dám.
#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
{
});
});
}
Chyba, ktorú mám, je:
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>
]
Funguje to dobre, ak používam socket_.async_read_some (), ale pretože chcem pevný počet bajtov čítať, nie je to tak dobré.
odpovede:
2 pre odpoveď č. 1Kód chyby nemôžete prevziať podľa meniteľnej referencie:
[](boost::system::error_code ec, std::size_t N) {}
alebo
[](boost::system::error_code const& ec, std::size_t N) {}
#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();
}
výtlačky
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"