如何在Qt中比较到达的TCP / IP数据

时间:2012-11-06 18:08:03

标签: c# qt networking tcp

我正在尝试将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!是真的 :)。我应该选择哪种数据格式?

1 个答案:

答案 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");