0
我試圖比較TCP客戶端中到達的數據與QString。但我認爲,這是一種比較的形式。我的TCP客戶端是用C#編寫的Qt和TCP服務器。下面是的Qt的示例代碼我讀功能:我如何比較到達的Qt中的TCP/IP數據
void MyClient::slotReadyRead()
{
QString okStr = "OK!";
ui->textEdit->append(okStr);
ui->textEdit->append("Reading...");
QString str = socket->readAll();
ui->textEdit->append(str);
if(str == okStr)
ui->textEdit->append("OK! is true");
else
ui->textEdit->append("OK! is false");
}
,這裏是寫C# - 服務器代碼的命令「OK!」:
private void WriteOutput(Commands cmd)
{
if (NS == null)
return;
string str = Enum.GetName(typeof(Commands), cmd);
StreamWriter writer = new StreamWriter(NS);
writer.WriteLine(str + "!");
writer.Flush();
}
在這種情況下,CMD將「OK」。在Qt-TCP客戶端,我收到以下消息: OK! 正在讀... 好!
好的!是假的 但我想有一個行!是真的 :)。我應該選擇哪種數據格式?
如果您使用的是''來標記的應用級消息的末端,那麼你讀函數必須堅持讀書,直到它讀一個'!'。 TCP不會爲您執行應用程序級別的消息界限 - 您必須這樣做。 (或者您是否使用行來劃分應用程序級別的消息?我們無法從您的代碼中得知)請閱讀[我的答案](http://stackoverflow.com/a/11873691/721269)的最後兩段以[this](http://stackoverflow.com/questions/11873366/android-tcp-app-hanging-on-instream-readline)TCP問題。 –
我使用'\ n'來分隔應用程序級別的消息。這裏是writeline-function的描述:http://msdn.microsoft.com/en-au/library/system.io.streamwriter.writeline –
那麼爲什麼你不從套接字讀取,直到你得到一個換行符? –