으로 전체 내용을 읽으겠습니다. Boost.ASIO를 사용하여 간단한 WebSocket 서버를 작성하고 있습니다. 지금 나는 악수를 처리하려고 노력 중이다. 내 문제는 클라이언트에서 보낸 핸드 셰이크 메시지의 길이가 미리 정의 된 것처럼 보이지 않는다는 것입니다.Boost.ASIO [WebSocket]
제 질문은 메시지가 끝날 때 핸드 셰이크를 읽지 않으려면 어떻게합니까?
먼저 지정된 바이트 수만큼 읽은 async_read_some을 시도했습니다.
void Connection::readMessage()
{
auto self(shared_from_this());
w_socket.async_read_some(boost::asio::buffer(w_data, max_length),
[this, self](boost::system::error_code ec, std::size_t length) // Lambda function
{
if (!ec)
{
std::cout << w_data << std::endl;
}
});
}
위의 코드는 나에게이 결과 준 : 그럼 http://i.imgur.com/LSyfG2U.png
내가 더 조회는 시도를 발견 일시적으로 핸드 셰이크 메시지를 수정 (연속 신규 라인까지 읽기가 건)이 async_read_until을하지만, 그것은 그것이 멈추는 것을 보장하지 않습니다. 위의 코드는이 결과 준
void Connection::readMessage()
{
auto self(shared_from_this());
boost::asio::async_read_until(w_socket, streambuffer, "\r\n\r\n",
[this, self](boost::system::error_code ec, std::size_t length) // Lambda function
{
if (!ec)
{
std::istream is(&streambuffer);
std::getline(is, w_data_s);
std::cout << w_data_s << std::endl;
}
});
}
:
http://i.imgur.com/JW1dyLH.png
또는 어쩌면 더 나은 질문 (dataframes 핸드 셰이크 메시지를 처리하는 가장 좋은 것입니다 어느 악수를 통과 한 후 일반 메시지를 처리하는 가장 좋은 것입니다있는 것 및 물건).
고마워요, 올리버. async_read_until을 사용하는 것에 대해 질문 한 유일한 이유는 독자가 끝까지 읽지 않으려 고하는 방식을 사용하여 누군가를 악용하려는 느낌이 들기 때문입니다. 하지만 이러한 공격을 막기 위해 타임 아웃 타이머를 추가하는 것이 좋습니다. – Evan