QT C ++将收到的数据报与字符串进行比较

时间:2016-09-03 19:42:41

标签: c++ string qt compare datagram

我试图将收到的数据报中的数据与字符串进行比较,当我运行程序时,我看到我收到“test”,但if语句不起作用。

.

我尝试过不同的比较方法,但到目前为止没有任何效果。

printf(“%s”,jag.c_str());当我用netcat发送测试时,显示也会测试 有任何想法吗? 谢谢:))

3 个答案:

答案 0 :(得分:1)

str2不是“测试”,而是“测试”。

std::string str2 ("test.");

“test”不等于“test”。所以比较失败了。

答案 1 :(得分:0)

数据报的价值是多少?为什么不使用QString?

const QString srt1(datagram);
// Print what did you load
qDebug() << datagram << srt1;
const QString srt2("test.");
if (QString::compare(srt1, srt2, Qt::CaseSensitive) {
    qDebug() << ("test ok");
}

答案 2 :(得分:0)

更好地使用异步方法,避免在while(s)内部执行此类操作。

以下代码在实际应用程序中正常运行。

班级标题

#include <QObject>
#include <QUdpSocket>

const int     UDP_SOCKET_PORT  = 45454;
const QString UDP_HELLO_STR    = "hello!";

class YourClass: public QObject
{
    Q_OBJECT;
public:
    YourClass();

private slots:
    void processDatagram();

private:
    QUdpSocket* udpSocket;
}

班级来源

YourCLass::YourClass():udpSocket(new QUdpSocket(this))
{
    udpSocket->bind(UDP_SOCKET_PORT, QUdpSocket::ShareAddress);
    connect(udpSocket, SIGNAL(readyRead()), this, SLOT(processDatagram()));
}

void YourCLass::processDatagram()
{
    QByteArray l_data;
    while(udpSocket->hasPendingDatagrams())
    {
        l_data.resize(udpSocket->pendingDatagramSize());

        QHostAddress l_addr;
        udpSocket->readDatagram(l_data.data(), l_data.size(), &l_addr);
        if(UDP_HELLO_STR == l_data.data())
        {
            QString l_srv_addr = l_addr.toString();

            if(!l_srv_addr.isEmpty())
            {
                qDebug() << "Received: " << l_data.data() << "from address: " << l_addr.toString();
            }
            else
            {
                qWarning() << "Datagram != " << UDP_HELLO_STR << ": " << l_data.data();
            }
        }
    }
}