2013-03-05 2 views
0

TCP/IP 서버에 연결하는 C++에서 boost :: asio를 사용하여 클라이언트 프로그램을 만들었습니다. 내가 명령이 말을 보낼 때 "llist"그것은 새로운 라인 문자로TCP IP 통신

? "llist" 
l1 32x32 Video "Video L1" 
l2 512x512 Video "Audio L2" 

각 문장의 끝을 반환하고 전송의 끝에서 그것은 여분의 새 라인 문자를해야합니다. 그래서 내 청취 기능은 소켓

len=_socket->read_some(boost::asio::buffer(reply,sizeof(reply)),error);// char reply[2]; 

에서 두 개의 문자를 읽고 나는 그것이 작동하지 않을 경우 사용 "\ n을"검사 때 문제입니다.

if(reply[0]!='\n') 
    if(reply[1]!='\n') 
     str.insert(i,1,reply[0]); //std::string str; 

무엇이 문제 일 수 있나요?

+0

나는 당신의 논리를 추측하려고 노력할 수 있지만 잠재적으로 부정확 한 가정을해야 할 것입니다. 한 번에 소켓에서 2자를 읽고 새 라인을 확인합니다. 조건문을 사용하여 2 문자를 지우므로 응답 색인 0과 1을 모두 삽입해야합니다. 처음 삽입하는 것 같습니다. 이것은 당신이 원하는 행동입니까? –

답변

3

잘못된 점에 대해 자세히 설명하지는 않았지만, 추측하면 현재 읽고있는 방식으로 올바른 문자가 삭제됩니다 (예 : reply[1]).

boost::asio::read_until(socket, buffer, '\n'); 

및 전송의 끝으로 빈 줄을 치료 :

대신 전체 라인을 읽을 boost::asio::read_until를 사용할 수 있습니다.