boost asio를 사용하여 TCP / IP 스택 위에 프로토콜을 구현하고 싶습니다. 프로토콜의 길이-PDU는 처음 6 바이트에 포함됩니다. 이제 asio에서 제공하는 동기 읽기 방법을 사용하여 처음 6 바이트를 정확히 읽고 길이 n을 계산 한 다음 정확히 n 바이트를 읽어 전체 PDU를 얻을 수 있습니다.
하지만 비동기 메서드를 사용하고 싶지만 asio 문서 의 예제 를 살펴보면 질문이 생깁니다. 저자는 소켓 멤버 함수 async_read_some ()을 사용하여 소켓에서 불확정 한 양의 데이터를 읽습니다. 전체 PDU를 받기 위해 첫 번째 단락에 설명 된 "2 단계"절차를 어떻게 적용합니까? 아니면 내 문제에 대한 또 다른 권장 솔루션이 있습니까?
async_read
고정 된 양을 읽으 려면 비 멤버 함수 를 사용하십시오 .
예를 들어, std::vector
버퍼에 a 또는 이와 유사한 것을 사용합니다 .
// read the header
buffer.resize(6);
async_read(socket, boost::asio::buffer(buffer),
[=](const boost::system::error_code & error, size_t bytes){
if (!error) {
assert(bytes == 6);
// read the payload
buffer.resize(read_size(buffer));
async_read(socket, boost::asio::buffer(buffer),
[=](const boost::system::error_code & error, size_t bytes){
if (!error) {
// process the payload
}
});
}
});
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다