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-

...

asiakas

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
#ifndef UDPASIAKASTOIMINNOT_H
#define UDPASIAKASTOIMINNOT_H

#include <QObject>
#include <QUdpSocket> //udp funktiot on täällä
#include <QDebug>

class UdpAsiakasToiminnot : public QObject
{
    Q_OBJECT
public:
    explicit UdpAsiakasToiminnot(QObject *parent = 0);
    QUdpSocket *udpLiitynta;
public slots:
void LueDataa();
void KirjoitaDataa(quint32 arvo);
};
#endif // UDPASIAKASTOIMINNOT_H

Koodissa liitetään socket porttiin ja lähetetään dataa

Code Block
#include "udpasiakastoiminnot.h"

UdpAsiakasToiminnot::UdpAsiakasToiminnot(QObject *parent)QObject(parent)
{
    udpLiitynta=
{code}
#include <QUdpSocket>
...

    //tehdään osoitinmuuttuja socketia varten
    QUdpSocket *udpSocket;
{code}
Koodissa liitetään socket porttiin ja lähetetään dataa
{code}
//muodostimeen varaukset ja liitynnät
    //varataan udpSocket muuttujalle muistia
    udpSocket = new QUdpSocket(this);
  //  // liitetään socket porttiinjos asiakas haluaisi myos lukea, niin myos seuraavat
  //  udpSocketudpLiitynta->bind(4545445401, QUdpSocket::ShareAddress);

 ...  //  connect(udpLiitynta,SIGNAL(readyRead()),this,SLOT(LueDataa()));
}

void UdpAsiakasToiminnot::LueDataa()
{
}

void DialogUdpAsiakasToiminnot::on_sendMessage_clicked(KirjoitaDataa(quint32 arvo)
{
    QVector<quint32> v;
   QString viesti=ui->lineEdit->text();//luetaan teksti lineEdit ikkunasta v<<(quint32)1;//viestin nimi
    v<<arvo;
    //QByteArray on tavuvektori
    QByteArray datagram;//esitellään muuttuja, joka sisältää tietoa 8:n bitin pätkissä
    datagram.append(viesti);//lisätään viesti muuttujaan
    qDebug() <<"kirjoitetaan dataa "<< v;
    //QDataStream tyyppinä voi lähettää perättäistä tietoa io-laittelle
     QDataStream out (&datagram,QIODevice::WriteOnly);
    //foreach - kopioi vuorollaan jokainen v:n alkio f muuttujaan ja lisää
    //kirjoitetaan viesti sockettiin jokainen f out:n jatkoksi
    foreach(quint32 f,v) { out << f; }
    udpSocketudpLiitynta->writeDatagram(datagram.data(), datagram.size(),                      QHostAddress::Broadcast,45454 45401);
}
{code    qDebug()<<"data kirjoitettiin";
}

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}
udpSocket = 

 

 

Udp-palvelin

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.

 

Ja vielä tehdään tiedolle vastaanottaja.

Code Block
#ifndef UDPPALVELINTOIMINNOT_H
#define UDPPALVELINTOIMINNOT_H
#include <QObject>
#include <QUdpSocket> //udp funktiot on täällä

class UdpPalvelinToiminnot : public QObject
{
    Q_OBJECT
public:
    explicit UdpPalvelinToiminnot(QObject *parent = 0);
    QUdpSocket *udpLiitynta;
signals:
    void Tulokset(qint32);
public slots:
    void LueDataa();
};
#endif // UDPPALVELINTOIMINNOT_H

Seuraavassa koodissa on esitetty numeerisen datan luku udp-väylältä

Code Block
#include "udppalvelintoiminnot.h" //#include <QReadLocker>
 //QReadWriteLock lukulukko;
 UdpPalvelinToiminnot::UdpPalvelinToiminnot(QObject *parent) :
 QObject(parent)
 {
    udpLiitynta=new QUdpSocket(this);
    udpSocketudpLiitynta->bind(4545445401, QUdpSocket::ShareAddress);
    connect(udpSocketudpLiitynta, SIGNAL(readyRead()),this, SLOT(processPendingDatagramsLueDataa()));
{code}

Ja vielä tehdään tiedolle vastaanottaja.

{code}
void Dialog::processPendingDatagrams()
{
    //esitellään muuttuja tavujonolle }
 void UdpPalvelinToiminnot::LueDataa()
 {
    qint32 f;
    qDebug() << "udpLiitynta";
    while (udpLiitynta->hasPendingDatagrams()) {
    	QByteArray datagram;
    //otetaan dataa vastaan niin kaun kuin on tulossa
 datagram.resize(udpLiitynta->pendingDatagramSize());
       while (udpSocket->hasPendingDatagramsudpLiitynta->readDatagram(datagram.data(), datagram.size()) {
;
        QDataStream in(datagram);
     //sovitetaan muuttuja tulevaan dataanin>>f;
        datagram.resize(udpSocket->pendingDatagramSize());if(f==(qint32) 1 )
        {
        //luetaan data muuttujaanin>>f;
          udpSocket->readDatagram(datagram.data(), datagram.size());
qDebug()<<"tulokset "<<f;
         //esitetään muuttuja näytölläemit Tulokset(f);
        ui->label->setText(tr("Received: \"%1\"") .arg(datagram.data()));
 return;
        }
    }
{code }