PDA

View Full Version : Broadcast string with udpsocket



wirasto
21st September 2009, 19:51
I'm try broadcast string with udpsocket. But not work :(


Server Source Code

sender.cpp


#include "sender.h"

Sender::Sender()
{
socket=new QUdpSocket(this);
QTimer *timer=new QTimer(this);
timer->setInterval(100);
timer->start();

connect(timer, SIGNAL(timeout()), this, SLOT(siarkan()));
}

void Sender::siarkan()
{
QByteArray datagram;
QDataStream out(&datagram, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << "Salawaku" << "Wirasto" << "Slackware";

socket->writeDatagram(datagram, QHostAddress::Broadcast, 9988);
}



main.cpp


#include <QtCore/QCoreApplication>
#include "sender.h"

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);

Sender send;

return a.exec();
}




Client Source Code

dialog.cpp


#include "dialog.h"
#include "ui_dialog.h"
#include <QDebug>

Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::Dialog)
{
ui->setupUi(this);

socket=new QUdpSocket(this);
socket->bind(9988);

connect(socket, SIGNAL(readyRead()), this, SLOT(terimaData()));
}

Dialog::~Dialog()
{
delete ui;
}

void Dialog::terimaData()
{
QString group, nama, distro;


while( socket->hasPendingDatagrams() )
{
QByteArray buffer( socket->pendingDatagramSize(), 0 );
socket->readDatagram( buffer.data(), buffer.size() );
QDataStream stream( buffer );
stream.setVersion( QDataStream::Qt_4_0 );
stream >> group >> nama >> distro;
}

ui->lineEdit->setText(group);
ui->lineEdit_2->setText(nama);
ui->lineEdit_3->setText(distro);
}


main.cpp


#include <QtGui/QApplication>
#include "dialog.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}



What's wrong with my code ?

kwisp
22nd September 2009, 07:14
Is "readyRead()" emitting?

wirasto
22nd September 2009, 23:01
Is readyRead signal not emitting in my source code ?

How and where I must emit readyRead signal ?

kwisp
23rd September 2009, 07:24
>where I must emit readyRead signal ?
nowhere. Qt makes it.

you can write:

void Dialog::terimaData()
{
qDebug()<<__PRETTY_FUNCTION__;
QString group, nama, distro;
...

and see log.

wirasto
23rd September 2009, 10:27
void Dialog::terimaData()
{
i++;
qDebug() << QString("It's OK %1").arg(i);
.....



Result :

It's OK 1
It's OK 2
It's OK 3
It's OK 4
........
........


I think readyRead() is emitting...

So, why I still can't catch string broadcasting ?

kwisp
23rd September 2009, 12:13
try to use another function to read data
as:
QByteArray QIODevice::readAll ()
qint64 QIODevice::readLine ( char * data, qint64 maxSize )
etc.
I think that the problem is QDataStream or QByteArray usage.