QT c++比较接收到的数据报到字符串
QT C++ compare received datagram to string
我试图将收到的数据报中的数据与字符串进行比较,当我运行程序时,我看到我收到"test",但if语句不起作用。
#include <QUdpSocket>
#include <QTextStream>
#include <string>
#include <QString>
#include <iostream>
int main()
{
QTextStream qout(stdout);
QUdpSocket *udpSocket = new QUdpSocket(0);
udpSocket->bind(3838, QUdpSocket::ShareAddress);
while (udpSocket->waitForReadyRead(-1)) {
while(udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
QHostAddress sender;
quint16 senderPort;
udpSocket->readDatagram(datagram.data(), datagram.size(),
&sender, &senderPort);
qout << "received from " << sender.toString() << datagram.data() << endl;
using namespace std;
string jag = datagram.data();
std::string str1 (jag.c_str());
std::string str2 ("test.");
printf("%s", jag.c_str());
if (str1.compare(str2) == 0)
{
printf("test ok");
}
}
}
}
我试过不同的比较方法,但都没有用。
printf (" % s " jag.c_str ());当我用netcat发送测试时也显示测试什么好主意吗?谢谢:)
str2
不是"test"而是"test.".
std::string str2 ("test.");
"test"不等于"test",所以比较失败。
数据报的值是多少?为什么不用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");
}
最好使用异步方法,避免在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();
}
}
}
}
相关文章:
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 如果我在块中编写字符串文字,是否会从数据部分复制整个字符串数据?
- 如何使用 asio 本地数据报构建回显服务器和客户端?
- 无法在 c++ 中将字符串分配给字符串数据类型
- 连接UDP套接字,但仍然接收来自其他源的数据报
- 将特定字符串数据解析为变量
- C++ 将字符串数据包转换为 iphdr语言 - 字符串数据包的格式应该是什么?
- 基于给定字符串数据类型的链表删除节点
- 插入了 C++ 数组字符串数据,但在显示输出时不显示
- 使用来自串行端口的字符串数据来操作振镜扫描仪在更高的速度下会出错
- UDP 客户端(接收器)未按预期接收数据报
- 将元音与字符串数据类型的字符串分开,并将其存储在新字符串中
- 放置在外部 DLL 中的类中的字符串数据的内存损坏
- 创建字符串数据串起
- 如何在C++中将字符串数据存储在字符串 2D 数组中
- C++程序不返回文件中文本和字符串数据的值
- C++:在字符串数据类型中创建单词"letter after letter"
- 将向量中的字符串数据解析为适当的数据类型 c++
- QT UDP套接字返回空数据报