Я звоню на сервер через TCP / IP. Я отправляю пару символов и хочу получить ответ, отправленный моим acknowledge
-fct. Но я получаю только столько символов, сколько отправляю на сервер.
constexpr int maxInputBufferLength{1024};
using boost::asio::ip::tcp;
struct session
: public std::enable_shared_from_this<session>
{
public:
session(tcp::socket socket)
: socket_(std::move(socket))
{
}
void start(){
do_read();
}
private:
void do_read(){
auto self(shared_from_this());
socket_.async_read_some(boost::asio::buffer(data_, maxInputBufferLength),
[this, self](boost::system::error_code ec, std::size_t length)
{
command_t currentCommand{data_};
if(currentCommand.commandStringVector.front()==driveCommand){
acknowledge("driveCommand triggered by TCP");
}
....
}
void acknowledge(std::string ackmessage){
auto self(shared_from_this());
boost::asio::async_write(socket_, boost::asio::buffer(ackmessage, maxInputBufferLength),
[this, self, ackmessage](boost::system::error_code ec, std::size_t length)
{
std::cout << ackmessage <<"\n";
if(ec.value()){
std::cerr << ec.category().name() << ':' << ec.value() << "\n";
}
});
}
char data_[maxInputBufferLength];
};
Согласно моим небольшим знаниям, моя acknowledge
функция, которая вызывает async_write
со своим собственным boost::asio::buffer
, должна отправлять весь буфер, который должен содержать ackmessage
с длиной maxInputBufferLength
, который является глобальным constexpr int
.