Envoyer des datagrammes en UDP
Bonjour,
Voilà je m'essaye au langage QT et j'essaye de coder une application qui envoie des datagrammes en UDP, mais le soucis c'est que dès que je clique sur l'envoie de ma première trame ou ma deuxième l'application se ferme et j'obtiens l'erreur: cannot output file debug /nomduprogramme.exe : Permission denied.
J'ai fais des recherches sur le web et normalement c'est parce que le programme tourne toujours mais pourtant je n'ai rien dans mon gestionnaire des tâches.... Du coup à chaque fois je dois recréer le programme....
Je vous mets mon code si quelqu'un peut m'aider.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #ifndef SENDER_H
#define SENDER_H
#include <QWidget>
#include <QTimer>
class QLabel;
class QPushButton;
class QUdpSocket;
class Sender : public QWidget
{
Q_OBJECT
public:
explicit Sender(QWidget *parent = nullptr);
private slots:
void startBroadcasting();
void Datagram();
void deuxdata();
private:
QLabel *status = nullptr;
QPushButton *startButton = nullptr;
QPushButton *premieretrame;
QPushButton *deuxiemetrame;
QUdpSocket *udpSocket = nullptr;
QTimer timer;
QTimer timemesure;
int messageNo = 1;
};
#endif SENDER_H |
cpp
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#include <QtWidgets>
#include <QtNetwork>
#include <QtCore>
#include "mainwindow.h"
Sender::Sender(QWidget *parent)
: QWidget(parent)
{
status = new QLabel(tr("Pret a envoyez les datagrammes sur le port 45454"));
status->setWordWrap(true);
premieretrame = new QPushButton("trames1");
deuxiemetrame = new QPushButton("Trames 2");
startButton = new QPushButton(tr("&GO"));
auto quitButton = new QPushButton(tr("&Quittez"));
auto buttonBox = new QDialogButtonBox;
buttonBox->addButton(startButton, QDialogButtonBox::ActionRole);
buttonBox->addButton(quitButton, QDialogButtonBox::RejectRole);
udpSocket = new QUdpSocket(this);
connect(startButton, &QPushButton::clicked, this, &Sender::startBroadcasting);
connect(quitButton, &QPushButton::clicked, this, &Sender::close);
connect(premieretrame, &QPushButton::clicked, this, &Sender::Datagram);
connect(deuxiemetrame, &QPushButton::clicked, this, &Sender::deuxdata);
auto mainLayout = new QVBoxLayout;
mainLayout->addWidget(status);
mainLayout->addWidget(premieretrame);
mainLayout->addWidget(deuxiemetrame);
mainLayout->addWidget(buttonBox);
setLayout(mainLayout);
setWindowTitle(tr("Sender"));
}
void Sender::startBroadcasting()
{
startButton->setEnabled(false);
timer.start(1000);
timemesure.start(1500);
}
void Sender::Datagram()
{
status->setText(tr("Trames=%1").arg(messageNo));
QByteArray datagram = "J'ai reussi=" + QByteArray::number(messageNo);
udpSocket->writeDatagram(datagram, QHostAddress::Broadcast, 45454);
++messageNo;
}
void Sender::deuxdata()
{
status->setText(tr("Envoie mesure relevé"));
QByteArray data ="Mesure envoyée";
udpSocket->writeDatagram(data,QHostAddress::Broadcast, 45454);
} |