Я пытаюсь получить данные от подключенной к локальной сети инфракрасной камеры.
Я не знаю, как подходить к пакетам из внешней сети.
Вот мой код.
Код ниже был запущен на Qt 5.9.7 (msvc2017_64) Я изменил коды из примера Qt UDP. (https://www.bogotobogo.com/Qt/Qt5_QUdpSocket.php)
#include "myudp.h"
MyUDP::MyUDP(QObject *parent) :
QObject(parent)
{
// create a QUDP socket
socket = new QUdpSocket(this);
socket_cam = new QUdpSocket(this);
// The most common way to use QUdpSocket class is
// to bind to an address and port using bind()
// bool QAbstractSocket::bind(const QHostAddress & address,
// quint16 port = 0, BindMode mode = DefaultForPlatform)
socket->bind(QHostAddress::LocalHost, 1234);
connect(socket, SIGNAL(readyRead()), this, SLOT(readyRead()));
}
void MyUDP::HelloUDP()
{
QByteArray Data;
QHostAddress camera_loc = QHostAddress("192.168.10.197");
quint16 cameraPort = 32197;
qint64 deg_num = socket->readDatagram(Data.data() ,964, &camera_loc,
&cameraPort);
qDebug() << "Deg_num: " << deg_num; //this returns -1. Therefore, it
seems it can't read any data from camera_loc.
// Sends the datagram datagram
// to the host address and at port.
// qint64 QUdpSocket::writeDatagram(const QByteArray & datagram,
// const QHostAddress & host, quint16 port)
socket->writeDatagram(Data, QHostAddress::LocalHost, 1234);
}
void MyUDP::readyRead()
{
// when data comes in
QByteArray buffer;
buffer.resize(socket->pendingDatagramSize());
QHostAddress sender = QHostAddress("192.168.10.197");
quint16 senderPort = 32197;
// qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize,
// QHostAddress * address = 0, quint16 * port = 0)
// Receives a datagram no larger than maxSize bytes and stores it
// The sender's host address and port is stored in *address and *port
// (unless the pointers are 0).
socket->readDatagram(buffer.data(), buffer.size(),
&sender, &senderPort);
qDebug() << "Message from: " << sender.toString();
qDebug() << "Message port: " << senderPort;
qDebug() << "Message: " << buffer;
}
Как я видел на Wireshark, пакеты поступили правильно, как я и ожидал.
Тем не менее, мой код не работает, как я ожидал. (readDatagram на camera_loc возвращает (-1))
Согласно другим потокам, нам не нужно их подключать, потому что для связи по UDP не нужно устанавливать соединения.
С этим кодом я хочу сделать следующее:
(0. Сохранить данные с камеры (192.168.10.197) в переменной с помощью readDatagram) Я не уверен, что это действительно необходимый процесс ...
1. Записать данные в буфер, как написано в этом коде (используя функцию writeDatagram).
Я не мог найти решения, даже если я боролся.
Я думал, что это будет легко, но это не было ...
Любой совет будет очень благодарен, потому что я новичок в сети qt и UDP.
Заранее спасибо.