Задать вопрос
@igormitrakov
Начинающий разработчик

Не могу принять датаграммы по QUdpSocket?

Отправляю датаграмму по UdpSocket на свой IP в инете, но не могу поймать его. Только начал изучать работу с сетью в Qt. Подскажите пожалуйста что не так или куда копать, для решения проблемы. С QHostAddress::LocalHost всё работает.

Трансмитер
head1.h :
#include <QUdpSocket>
#include <QObject>
#include <QVBoxLayout>
#include <QByteArray>
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QHostAddress>


class UDPcls : public QObject
{
    Q_OBJECT
public:

    QPushButton *btn_transmit = new QPushButton("Отправить");
    QLineEdit *line_Edit = new QLineEdit();
    QVBoxLayout *lay = new QVBoxLayout();
    QWidget *window = new QWidget();
    QUdpSocket *socket = new QUdpSocket();

    void realiz()
    {
        lay->addWidget(line_Edit);
        lay->addWidget(btn_transmit);
        window->setLayout(lay);
        window->setWindowTitle("Reciever");
        window->show();
        socket->bind(QHostAddress("94.25.229.127"), 0);
        connect(btn_transmit, SIGNAL(clicked(bool)), this, SLOT(btn_transmit_clicked()));

    }

public slots:
    void btn_transmit_clicked()
    {
        QByteArray data;

        data.append(line_Edit->text());
        socket->writeDatagram(data, QHostAddress("94.25.229.127"), 0);
        line_Edit->setText("Датаграмма отправлена");


    }
};


main.cpp :
#include "head.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    UDPcls UDPobj;
    UDPobj.realiz();

    return a.exec();
}


Ресивер

head2.h :
#include <QUdpSocket>
#include <QObject>
#include <QByteArray>
#include <QWidget>
#include <QLabel>


class UDPcls : public QObject
{
    Q_OBJECT
public:

    QLabel *lbl = new QLabel("Ожидание датграммы...");
    QUdpSocket *socket = new QUdpSocket();


    void realiz()
    {
        lbl->show();
        socket->bind(QHostAddress("94.25.229.127"), 0);
        connect(socket, SIGNAL(readyRead()), this, SLOT(reciev()));

    }

public slots:
    void reciev()
    {
        QByteArray data;
        data.resize(socket->pendingDatagramSize());
        socket->readDatagram(data.data(), data.size());
        lbl->setText(data);


    }
};


main.cpp :
#include "head.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    UDPcls UDPobj;
    UDPobj.realiz();

    return a.exec();
}
  • Вопрос задан
  • 172 просмотра
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Konstantin18ko
@Konstantin18ko
Стоматолог
Я смотрю Вы из SPb.
Первое, проверьте проброс портов на удаленной машине. Проброс делается в роутере. Вовторых, если память мне не изменяет Yota дает серый IP, а не белый.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы