@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();
}
  • Вопрос задан
  • 55 просмотров
Пригласить эксперта
Ответы на вопрос 1
Konstantin18ko
@Konstantin18ko
Стоматолог
Я смотрю Вы из SPb.
Первое, проверьте проброс портов на удаленной машине. Проброс делается в роутере. Вовторых, если память мне не изменяет Yota дает серый IP, а не белый.
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
HARMAN Connected Services Нижний Новгород
от 60 000 до 120 000 руб.
Soft Media Int. Пенза
от 125 000 до 225 000 руб.
ООО ЭНЕРГИЯ Новосибирск
от 60 000 до 90 000 руб.