我试图将收到的数据报中的数据与字符串进行比较,当我运行程序时,我看到我收到“test”,但if语句不起作用。
.
我尝试过不同的比较方法,但到目前为止没有任何效果。
printf(“%s”,jag.c_str());当我用netcat发送测试时,显示也会测试 有任何想法吗? 谢谢:))
答案 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();
}
}
}
}