Повышение asio async_receive / write неправильно принимать / отправлять посылки.после 0х00 напишу 0хфе - PullRequest
0 голосов
/ 21 мая 2018

У меня есть сервер:

receive_socket->async_receive(boost::asio::buffer(receive_buffer[1], MAX_SIZE_PACKAGE),
        boost::bind(&ClientServingLogic::receive_event, this, 1,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));

И есть клиент:

void send(const char* text, int length) {
    if (length > BUFFER_SIZE)
        return;
    strcpy_s(buffer_sender, length, text); //buffer_sender has enough memory
    boost::asio::write(*socket_sender,boost::asio::buffer(buffer_sender, length));
}

////////////////////////////////// использование клиента

char subscribe[] = { 0x55, 0x03, 0x00, 0x11,
                    0b10001000,
                    0b00010000,
                    0b00000001,
                    0b00000000,
                    0b00000000,
                    0b00000000,
                    0b00000000,
                    0b00000000
                    };

client.send(subscribe, 15);

Итак, когда я пытаюсь использовать этот код, он работает правильно с первого 0x00.После этого в буфере будут храниться только 0xFE значения 12 раз.Память серверного буфера (receive_buffer [1]) после получения:

0x000001DA89F70160  55 03 00 fe fe fe fe fe  U..ююююю
0x000001DA89F70168  fe fe fe fe fe fe fe 00  ююююююю.

Первые 3 символа были получены правильно, включая 0x00.но после этого я получаю 0xFE, эта длина 12;

Как правильно получать данные целиком?

...