Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Udp on tiedonsiirtoprotokolla, joka ei vaadi päästäpäähän varmistettua yhteyttä. Udp-yhteyden avulla voidaan siirtää kaikkea tietoa prosessien välillä ethernetin yli. Tieto siirretään QByteArray tyypin avulla eli tavuina. QDataStream tyypin avulla tieto voidaan serialisoida siten, että se on vastaanottavassa päässä helposti purettavissa samaksi tietotyypiksi kuin lähetyksessä. QUdpSocket tyypin avulla voidaan muodostaa lädettäjä ja vastaanottaja. Seuraava esimerkki pyrkiii kuvaamaan muuttujien arvojen siirtoa prosessilta toiselle.

esimerkki zipattuna BroadcastServer.zip

QByteArray

QDataStream

QUdpSocket

Code Block
#include "sender.h"

SenderReceiver::SenderReceiver(QObject *parent) :
    QObject(parent)
{
    sendUdpSocket = new QUdpSocket(0);
    receiveUdpSocket = new QUdpSocket(0);
    receiveUdpSocket->bind(45455,QUdpSocket::ShareAddress);
    connect(receiveUdpSocket, SIGNAL(readyRead()), this, SLOT(processPendingDatagrams()));
}

//viestien lahetys
void SenderReceiver::broadcastDatagram(QVector<float> v)
{
    int error,i;
    QByteArray datagram;
    qDebug() << v;
    QDataStream out (&datagram,QIODevice::WriteOnly);
    foreach(float f,v)
    {
        out << f;
    }
    //kirjoitetaan udp-viesti, mahdollinen virhe kannattaisi tarkastaa
    error=sendUdpSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45455);
}

//viestien vastaanotto
void SenderReceiver::processPendingDatagrams()
{
    float f;
    //onko vastaanotettu viesteja
    while (receiveUdpSocket->hasPendingDatagrams()) {
         QByteArray datagram;
         datagram.resize(receiveUdpSocket->pendingDatagramSize());
         receiveUdpSocket->readDatagram(datagram.data(), datagram.size());
         QDataStream in(datagram);
         while (!in.atEnd()){
             in >> f;
             v2 << f;
         }
         qDebug() << v2;
         emit sendReceivedData(v2);
     }
}

...