首页 > 解决方案 > UDP数据包可以在wireshark上看到,从代码输出看不到

问题描述

我正在尝试从 UDP 连接的红外摄像机接收数据包。(FLIR Lepton 2.5) 我正在尝试在 Windows 10、Qt Creator 4.5、Qt 5.9 上运行我的代码。

正如您在下面的捕获中看到的,我的 UDP 连接的红外摄像机发送 UDP 数据包。

在此处输入图像描述

这是我的代码:

// myudp.cpp

#include "myudp.h"
#include <QNetworkProxy>

MyUDP::MyUDP(QObject *parent) :
    QObject(parent)
{
    // create a QUDP socket
    socket = new QUdpSocket(this);
    socket_cam = new QUdpSocket(this);

    cam_address = QHostAddress("192.168.10.197");
    cam_port = 32197;

    connect(socket, SIGNAL(connected()), this, SLOT(readNwrite()));

    socket->connectToHost(cam_address, cam_port, QIODevice::ReadWrite);

    if (socket->waitForConnected(2000))
        qDebug("Connected!");
    else
        qDebug("Cannot be connected..");
    qDebug() << socket->state();
//    seems to be connected...
}

void MyUDP::readNwrite()
{
    QByteArray data;
    qint64 resize_size = socket->pendingDatagramSize();
    //socket have NO size(resize_size == -1, ERROR!)
    if(resize_size != -1)
    {
        qDebug() << "data was resized properly; size: "<<resize_size;
        data.resize(socket->pendingDatagramSize());
    }
    else
        qDebug() << "data could not be resized(error)";
    qint64 det_num;
    det_num = socket->readDatagram(data.data(), 964, &cam_address, &cam_port);
    qDebug() << "Can receive data(returns -1 if NO): "<<det_num;
    //this returns nothing, too!
    qDebug() << "Data is here: " << data.data();

}

这是我的代码实现结果:

当信号连接()时,数据无法调整大小(错误)
可以接收数据(如果否返回-1):-1
数据在这里:
已连接!
QAbstractSocket::ConnectedState

当信号准备好Read()时,已连接!
QAbstractSocket::ConnectedState数据已正确调整大小;大小:0
可以接收数据(如果否则返回 -1):-1 数据在这里:
readyRead 信号有时似乎没有按预期发出。

但很明显,没有发送任何数据。

我试图找到与远程网络的 UDP 网络相关的示例。但是他们很少。

根据一些线程,人们建议不要connectToHost在 UDP 网络上使用函数。但是,我不知道如何在不使用connectToHost.

我想知道我应该如何更正我的代码以从远程网络获取数据包。任何建议都会非常感谢我,因为我是 UDP 网络和 Qt 的新手。

标签: c++qtsocketsudpudpclient

解决方案


推荐阅读