per prima cosa si deve modificare il file .pro per aggiungere il modulo network
-------------------------------------------------
QT += core gui network
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = udp_server
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui-------------------------------------------------
successivamente sul file .h della finestra si aggiungono i riferimenti evidenziati in giallo
-------------------------------------------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QUdpSocket>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QUdpSocket *udpSocket;
private slots:
void processPendingDatagrams();
};
#endif // MAINWINDOW_H
-------------------------------------------------
ed ecco la parte di codice che gestisce direttamente il server
in pratica si apre la porta di ascolto (in questo caso la 64009) e si connette una funzione di ascolto (processPendingData)
ed ecco la parte di codice che gestisce direttamente il server
in pratica si apre la porta di ascolto (in questo caso la 64009) e si connette una funzione di ascolto (processPendingData)
-------------------------------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtNetwork>
#include <QUdpSocket>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
udpSocket = new QUdpSocket(this);
QHostAddress myAddr = QHostAddress("192.168.0.100") ;udpSocket->bind(myAddr, 7755);
bool result = connect(udpSocket, SIGNAL(readyRead()),this, SLOT(processPendingDatagrams()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::processPendingDatagrams()
{
QByteArray datagram;
do {
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
qDebug() << datagram.data();
} while (udpSocket->hasPendingDatagrams());
}
-------------------------------------------------
per testare il tutto si puo' usare questo semplice codice di client UDP in Python
-------------------------------------------------
import socket
IPADDR = '192.168.0.100'
PORTNUM = 7755
PACKETDATA = 'Luca'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
s.connect((IPADDR, PORTNUM))
s.send(PACKETDATA)
s.close()
-------------------------------------------------
Nessun commento:
Posta un commento