2015-09-07 19 views
0

我正在實現一個簡單的基於Qt的客戶端,它一次發送一個命令到NON_QT服務器和服務器響應。一旦我收到服務器的回覆,我將其用於其他目的,具體取決於響應Qt客戶端收到垃圾字符,除了預期的字符串

一切按預期工作。只有輕微的毛刺我收到串像

command_accepted\u0000\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD 

雖然說預期的服務器的規格響應「command_accepted」。 所以我對我爲什麼會得到那些奇怪的字母一無所知。請建議我。

void ClientForNonQtServer::getResponse() 
{ 

    QTextStream stream(sockForClient); 
    QString line; 
forever 
    { 

    if(nextBlockSize == 0) 
    { 
     if(sockForClient ->bytesAvailable() < sizeof(quint16 )) 
     { 
      break; 
     } 
     stream >> nextBlockSize; 
    } 
    if(sockForClient ->bytesAvailable() < nextBlockSize) 
    { 
     break; 
    } 
    stream >> line; 
    if(!line.isNull()) 
     { 
     qDebug()<< " stream is "<< line; 
     } 

    } 
} 
+0

客戶端和服務器端可能使用不同的編碼。 – Zen

+0

你能告訴我怎麼讓客戶端使用相同的編碼。客戶端在Windows上運行UBuntu和d服務器 – samprat

+0

http://stackoverflow.com/questions/6357556/some-problem-when-client-receive-messages-from-server-though-socket – Zen

回答

0

從Qt的documentation

QTextStream & QTextStream ::運算符>>(即QString & STR)

從流中讀取並存儲在str中,然後返回一個字 參考流。單詞用空格分隔(即,所有的QChar :: isSpace()返回true的 字符)。

因此,一切都按預期工作。我相信,這裏最好使用QTextStream::readLineQTextStream::read

+0

我以前厭倦了readLine但沒有快樂 – samprat

+0

聲音就像服務器端一樣。 – Andrii