2013-03-05 72 views
0

我已經做了一個客戶端程序使用C++中的boost :: asio連接到TCP/IP服務器。當我發出命令說「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的回覆索引。看起來你只是插入第一個。這是你想要的行爲嗎? – 2013-03-05 13:26:58

回答

3

你還沒什麼錯的太多細節,只是在猜測,你目前的閱讀方式將下降有效字符(即什麼是在reply[1])。

您可以改用boost::asio::read_until閱讀整條生產線:

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

並把一個空行作爲傳輸結束。