Wiki Markup |
---|
h2. Periaate
|
Periaate
udp-protokolla on yksinkertaisin tiedonsiirtoprotokolla Ethernetin yli. Se ei vaadi kuittauksia, eikä siten varmista tiedon perille menoa, mutta varmistus voidaan toteuttaa muilla menetelmillä. |
...
h2. Udp-palvelin |
...
Projektitiedostoon täytyy lisätä määrittely network, jotta Qt ottaa mukaan verkkoasetukset |
...
{code |
} QT += network {code} Otsikkotiedostossa tulee esitellä udpSocket muuttuja |
...
{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 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} 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 = new QUdpSocket(this); udpSocket->bind(45454, QUdpSocket::ShareAddress); connect(udpSocket, SIGNAL(readyRead()),this, SLOT(processPendingDatagrams())); {code} Ja vielä tehdään tiedolle vastaanottaja. |
...
{code |
} 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} |