간단한 서버 클라이언트 응용 프로그램이 있습니다.C++ asio socket 서버에서 응답 받기
idia는 다음과 같습니다. 클라이언트가 sql-request를 사용하여 서버 문자열로 전송합니다. 서버가 요청을 처리하고 CSV 스타일 문자열로 형식화 된 데이터로 클라이언트 응답으로 되돌려 보내십시오.
모든 것이 이미 조정되었습니다. 한 가지만 허용합니다. 문제는 내가받은 문자열의 크기를 모르므로 클라이언트에서 응답을 읽는 것입니다.
코드를 넣고있다 :
서버 :
std::string answer;
answer = sql_read(*msg); //get the string with data from request
clientSock->write_some(buffer(answer, answer.size())); //send it back on client
클라이언트 :
std::string answer;
bytesRead = sock->read_some(boost::asio::buffer(readBuf, inputSize)); //read the answer, but how do I know correct size of string?
string_ptr msg(new std::string(readBuf, bytesRead));
answer = *msg;
어떻게 크기를 모른 채 결과 문자열을 읽을 수? 또는 내 aproach (문자열로 데이터를 보내는)가 근본적으로 잘못된 방법으로 올바른 방법으로 수행하는 경우?
팁 : 'clientSock-> write_some()'은 모든 데이터를 쓰지 않을 수도 있습니다. 반환 값을 확인하고 루프에서 호출해야합니다. Asio는 이러한 불편 함을 피하기위한 도우미 기능을 가지고 있습니다. 예 :'boost :: asio :: write (sock, boost :: asio :: buffer (answer));'. –