UDPCLIENT QT
Данная учебная программа только и делает что принимает информацию через определенный порт на UDP-сокет и выводит ее в QTextEdit. Приведу короткий листинг. Как и в случае с передатчиком, приемник тоже должен содержать network в файле pro:
QT += network
Файл udpclient.h
#ifndef UDPCLIENT_H
#define UDPCLIENT_H
#include "QDialog"
#include "QVBoxLayout"
#include "QTextEdit"
#include "QPushButton"
#include "QUdpSocket"
class UdpClient : public QDialog
{
Q_OBJECT
public:
UdpClient(QWidget *parent = 0);
~UdpClient();
public slots:
void CloseBtnClicked();
void dataReceived();
private:
QTextEdit *ReceiveTextEdit;
QPushButton *CloseBtn;
QVBoxLayout *mainLayout;
int port;
QUdpSocket *udpSocket;
};
#endif // UDPCLIENT_H
Файл udpclient.cpp
#include "udpclient.h"
#include QUdpSocket
#include QMessageBox
#include QHostAddress
UdpClient::UdpClient(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("UDP Client")); // Устанавливаем заголовок формы
// * Инициализируем каждый элемент управления * /
ReceiveTextEdit = new QTextEdit(this);
CloseBtn = new QPushButton(tr("Close"),this);
// * Устанавливаем макет * /
mainLayout=new QVBoxLayout(this);
mainLayout->addWidget(ReceiveTextEdit);
mainLayout->addWidget(CloseBtn);
connect(CloseBtn,SIGNAL(clicked()),this,SLOT(CloseBtnClicked()));
port =5555; // Устанавливаем параметр номера порта UDP, указываем для мониторинга данных по этому порту
udpSocket = new QUdpSocket(this); // Создаем QUdpSocket
connect(udpSocket,SIGNAL(readyRead()),this,SLOT(dataReceived()));
bool result=udpSocket->bind(port);// Привязать порт
if(!result)
{
QMessageBox::information(this,"error","udp socket create error!");
return;
}
}
UdpClient::~UdpClient()
{
}
void UdpClient::CloseBtnClicked()
{
close();
}
void UdpClient::dataReceived()
{
while(udpSocket->hasPendingDatagrams())// Есть дейтаграмма для чтения
{
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(),datagram.size());
QString msg=datagram.data();
ReceiveTextEdit->insertPlainText(msg);
}
}
