lunes, 18 de julio de 2011

Cliente simple echo. UDP.

Se trata de un cliente UDP de echo. Consta de un una caja de texto para escribir el nombre del servidor, y una otra caja de texto para enviar texto en claro al servidor. Aquí dejo la implementación de la clase principal.

echoclient.h
#ifndef ECHOCLIENT_H
#define ECHOCLIENT_H

#include < QWidget>
#include "IForm.h"

namespace Ui {
    class EchoClient;
}

class EchoClient : public QWidget, public IForm
{
    Q_OBJECT

public:
    explicit EchoClient(QWidget *parent = 0);
    virtual ~EchoClient();

    virtual void putTexts();
    virtual void setuid();

public slots:
    void onClickSend();

private:
    Ui::EchoClient *ui;
};

#endif // ECHOCLIENT_H

echoclient.cpp
#include "echoclient.h"
#include "ui_echoclient.h"
#include "qtudpclient.h"
#include < QUdpSocket>
#include < QHostAddress>
#include < iostream>

EchoClient::EchoClient(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::EchoClient)
{
    ui->setupUi(this);
    putTexts();
    setuid();
}

EchoClient::~EchoClient()
{
    delete ui;
    qDebug("Delete EchoClient");
}

void EchoClient::putTexts()
{
    ui->lbServerName->setText(tr("Server Name"));
    ui->lbText->setText(tr("Text"));
    ui->leServerName->setText("localhost");
    ui->pbSend->setText(tr("Send"));
}

void EchoClient::setuid()
{
    setAttribute(Qt::WA_DeleteOnClose);
    connect(ui->pbSend, SIGNAL(clicked()),SLOT(onClickSend()));
}

void EchoClient::onClickSend()
{
    qDebug("onClickSend");
    QUdpSocket *udp =new QUdpSocket(this);
    const QHostAddress *host = new QHostAddress(ui->leServerName->text());

    //const char *txt = (const char*) ui->leText->text().toLocal8Bit().data();
    QByteArray ba = ui->leText->text().toLocal8Bit();
    const char *txt = ba.data();
    qint16 len = ui->leText->text().length();
    qint16 port = 8888;
    udp->writeDatagram(txt, len, QHostAddress::LocalHost,  port);
    qDebug(ui->leServerName->text().toStdString().c_str());
    delete host;
    delete udp;
}

Y aquí podemos ver la información enviada al servidor:

sudo tcpdump -xX -i lo
0x0000:  4500 0028 0000 4000 4011 3cc3 7f00 0001  E..(..@.@.<.....
0x0010:  7f00 0001 c30e 22b8 0014 fe27 6865 6c6c  ......"....'hell
0x0020:  6f20 7365 7276 6572                      o.server
En los próximos envíos veremos la interpretación de esta información y apliaremos el cliente para que sea capaz de recibir e interpretar las respuestas del servidor.

1 comentario:

  1. Veo que el código fuente no se ve demasiado bien, intentaré en los próximos días intentaré hacer algo para arreglarlo.

    ResponderEliminar