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

Periaate

...

udp-protokolla

...

on

...

yksinkertaisin

...

tiedonsiirtoprotokolla

...

Ethernetin

...

yli.

...

Se

...

ei

...

vaadi

...

kuittauksia,

...

eikä

...

siten

...

varmista

...

tiedon

...

perille

...

menoa,

...

mutta

...

varmistus

...

voidaan

...

toteuttaa

...

muilla

...

menetelmillä.

...

Udp-palvelin

...

Projektitiedostoon

...

täytyy

...

lisätä

...

määrittely

...

network,

...

jotta

...

Qt

...

ottaa

...

mukaan

...

verkkoasetukset

{
Code Block
}
QT       += network
{code}

Otsikkotiedostossa

...

tulee

...

esitellä

...

udpSocket

...

muuttuja

{
Code Block
}
#include <QUdpSocket>
...

    //tehdään osoitinmuuttuja socketia varten
    QUdpSocket *udpSocket;
{code}

Koodissa

...

liitetään

...

socket

...

porttiin

...

ja

...

lähetetään

...

dataa

{
Code Block
}
//muodostimeen varaukset ja liitynnät
    //varataan udpSocket muuttujalle muistia
    udpSocket = new QUdpSocket(this);
    // liitetään socket porttiin
    udpSocket->bind(45454, QUdpSocket::ShareAddress);

 ...

void Dialog::on_sendMessage_clicked()
{
    QString viesti=ui->lineEdit->text();//luetaan teksti lineEdit ikkunasta
    QByteArray datagram;//esitellään muuttuja, joka sisältää tietoa 8:n bitin pätkissä
    datagram.append(viesti);//lisätään viesti muuttujaan
    //kirjoitetaan viesti sockettiin
    udpSocket->writeDatagram(datagram.data(), datagram.size(),QHostAddress::Broadcast,45454);
}
{code}

Seuraavan

...

on

...

esimerkki

...

lukuarvon

...

lähetyksestä

...

udp-viestinä,

...

esimerkissä

...

simuloidaan

...

CAN

...

viestin

...

välitystä

{
Code Block
}
void CAN_MessageWithUdp::WriteCAN_Message(quint8 Id,quint64 message)
{
    QVector<qint64> v;
    v<<(qint64)Id;
    v<<(qint64) message;
    QByteArray datagram;
    QDataStream out (&datagram,QIODevice::WriteOnly);
    foreach(qint64 f,v) { out << f; }
    dataCANSocket->writeDatagram(datagram.data(), datagram.size(), QHostAddress::Broadcast, 45402);
}
{code}


h2. 

Udp-asiakas

...

Projekti

...

-

...

ja

...

otsikkotiedotoihin

...

tehdään

...

samat

...

lisäykset

...

kuin

...

palvelimessa.

...

Esimerkiksi

...

muodostimessa

...

tehdään

...

taas

...

liitäntä

...

ja

...

liitetään

...

udpSocketin

...

"valmis

...

signaali"

...

tiedon

...

vastaanottajaan.

{
Code Block
}
udpSocket = new QUdpSocket(this);
    udpSocket->bind(45454, QUdpSocket::ShareAddress);
    connect(udpSocket, SIGNAL(readyRead()),this, SLOT(processPendingDatagrams()));
{code}

Ja

...

vielä

...

tehdään

...

tiedolle

...

vastaanottaja.

{
Code Block
}
void Dialog::processPendingDatagrams()
{
    //esitellään muuttuja tavujonolle
    QByteArray datagram;
    //otetaan dataa vastaan niin kaun kuin on tulossa
    while (udpSocket->hasPendingDatagrams()) {
        //sovitetaan muuttuja tulevaan dataan
        datagram.resize(udpSocket->pendingDatagramSize());
        //luetaan data muuttujaan
        udpSocket->readDatagram(datagram.data(), datagram.size());
        //esitetään muuttuja näytöllä
        ui->label->setText(tr("Received: \"%1\"") .arg(datagram.data()));
    }
}
{code}

Seuraavassa

...

koodissa

...

on

...

esitetty

...

numeerisen

...

datan

...

luku

...

udp-väylältä

{
Code Block
}
void CAN_MessageWithUdp::ReadCAN_Message()
{
    quint64 f;
    qint32Qvect roskat;
    qDebug() << "data on CAN ";
    while (dataToCANSocket->hasPendingDatagrams()) {
         QByteArray datagram;
         datagram.resize(dataToCANSocket->pendingDatagramSize());
         dataToCANSocket->readDatagram(datagram.data(), datagram.size());
         QDataStream in(datagram);
         in>>f;
         qDebug()<<"Id "<<(qint64)f;

         if(f==(qint64)1)

         {
             message.clear();
             while (!in.atEnd())
             {
                 in >> f;
                 message<<f;
             ]
             return;
         }
         else if(f==(qint64)2)
         {
             quint8Qvect command;
             while (!in.atEnd()){
                 in >> f;
                 command.append(f);
             }
             return;
         }
....
{code}