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); } }