我正在尝试将TCP-Client中的到达数据与QString进行比较。但我认为,这是一种比较的扭曲形式。我的TCP客户端是用C#编写的Qt和TCP服务器。以下是Qt my read-function的示例代码:
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#-server代码“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!
OK!是假的 但是我希望有一个 OK!是真的 :)。我应该选择哪种数据格式?
答案 0 :(得分:0)
我解决了。问题是在windows中新行不是'\ n'而是'\ r \ n'。因此,如果我将Windows上的QString "OK!\n"
与已到达的TCP数据“确定!\ r \ n ”进行比较,那么我总是得到“假”。一种解决方案是将我的QString "OK!\r\n"
与到达的TCP数据“ OK!\ r \ n ”进行比较,或者第二种解决方案是仅拆分第一个“OK!”< / strong>使用Qt命令QString kurzstr = str.section("\r\n", 0, 0);
的部分数据以下是代码:
QString okStr = "OK!";
QString str = socket->readLine();
QString kurzstr = str.section("\r\n", 0, 0);
if(okStr == kurzstr)
ui->textEdit->append("OK! is true");
else
ui->textEdit->append("OK! is false");