domingo, 24 de julio de 2011

Cliente simple echo. UDP. Añadida selección de puerto.

Se ha añadido al cliente echo udp, la selección de puerto, para ello se ha usado un QSlider y un QLCDNumber.

Conectamos el valor producido por el QSlider al valor mostrado en el QLCDNumber y configuramos los valore máximos y mínimos del QSlider a los valores de puerto máximo y mínimo respectivamente.

const quint16 EchoClient::PORT_MIN = 1;
const quint16 EchoClient::PORT_MAX = 65535;
const quint16 EchoClient::PORT_DEFAULT = 8888;

...

void EchoClient::setuid()
{
    setAttribute(Qt::WA_DeleteOnClose);
    connect(ui->pbSend, SIGNAL(clicked()),SLOT(onClickSend()));
    connect(ui->sldPort, SIGNAL(valueChanged(int)), ui->lcdPort, SLOT(display(int)));

    ui->sldPort->setMinimum(EchoClient::PORT_MIN);
    ui->sldPort->setMaximum(EchoClient::PORT_MAX);
    ui->sldPort->setValue(EchoClient::PORT_DEFAULT);
}

Por último en la función de enviar cogemos el valor del puerto del QLCDNumber y lo enviamos al host especificado en el QLineEdit.

void EchoClient::onClickSend()
{
    qDebug("onClickSend");

    QHostInfo info = QHostInfo::fromName(ui->leServerName->text());
    if (!info.addresses().isEmpty())
    {
        QHostAddress address = info.addresses().first();
        QByteArray ba = ui->leText->text().toLocal8Bit();
        const char *txt = ba.data();
        qint16 len = ui->leText->text().length();
        qint16 port = ui->sldPort->value();

        QUdpSocket *udp =new QUdpSocket(this);
        udp->writeDatagram(txt, len, address,  port);
        delete udp;
    } else
    {
        QMessageBox msgBox;
        msgBox.setWindowTitle(tr("Error"));
        msgBox.setText(tr("Error host not found"));
        msgBox.setIcon(QMessageBox::Critical);
        msgBox.setStandardButtons(QMessageBox::Ok);
        msgBox.exec();
    }
}

Para descargar esta versión:

svn checkout http://infobasic.googlecode.com/svn/tags/infobasic-0.0.2 infobasic-read-only

No hay comentarios:

Publicar un comentario