UDP Client-Serveur de Chat en C++/Qt

Je suis en train d'écrire un programme de chat à l'aide de Qt. Il est à moitié rempli, mais il a quelques problèmes.

Tout d'abord j'ai une erreur quand je veux envoyer mon message écrit dans lineedit pour le client. C'est un QString, mais le writeDatagram envoie seulement un QByteArray. J'ai googlé et il existe quelques moyens pour la conversion de QString à QByteArray, mais je suis à la recherche d'une meilleure solution.
Je pense que je devrais utiliser connectToHost(), mais read() et write() ne fonctionnent pas.

Deuxième et principal problème est que je n'arrive pas à envoyer et recevoir des messages en continu! Évidemment, ce n'est pas encore arrivé, mais je sais qu'il ya quelque chose de mal avec elle parce que je l'ai testé sur Qt de la console et il n'a pas de travail là-bas aussi.

Je suis nouveau à l'interface graphique et la programmation Socket, donc j'ai beaucoup cherché avant que je poste ce sujet.

Mise à jour: Mon premier problème résolu, mais maintenant les paquets UDP n'obtenez pas d'envoyer et de recevoir encore moins de travail, comme une application de chat.

Mise à jour: j'ai trouvé quel était le problème et je l'ai résolu. Le code a besoin de deux QUdpSocket Objets. J'ai aussi mis à jour le code. C'est maintenant pleinement fonctionnel.
Si vous avez d'autres intrants, j'aimerais les écouter, sinon j'ai eu ma réponse.

Serveur:

#include "schat.h"
#include "ui_schat.h"

schat::schat(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::schat)
{
    ui->setupUi(this);
    socketServerc=new QUdpSocket(this);
    socketServer=new QUdpSocket(this);
    socketServer->bind(QHostAddress::LocalHost, 8001);
    connect(socketServer,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams()));

}

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

void schat::on_sendButton_clicked()
{


    QString word=ui->lineEdit->text();
    ui->textBrowser->append(word);
    QByteArray buffer;
    buffer=word.toUtf8();
    QHostAddress sender;
    quint16 senderPort;
    socketServerc->writeDatagram(buffer.data(), QHostAddress::LocalHost, 7000 );

}

void schat::readPendingDatagrams()
{
    while (socketServer->hasPendingDatagrams()) {
        QByteArray buffer;
        buffer.resize(socketServer->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;
        socketServer->readDatagram(buffer.data(), buffer.size(),&sender, &senderPort);
        ui->textBrowser->append(buffer.data());

    }

}

Client:

#include "uchat.h"
#include "ui_uchat.h"


uchat::uchat(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::uchat)
{
    ui->setupUi(this);
    clientSocket=new QUdpSocket(this);
    clientSocketc=new QUdpSocket(this);
    clientSocketc->bind(QHostAddress::LocalHost, 7000);
    connect(clientSocketc,SIGNAL(readyRead()),this,SLOT(readPendingDatagrams()));
}

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

void uchat::on_sendButton_clicked()
{
    QString word=ui->lineEdit->text();
    ui->textBrowser->append(word);
    QByteArray buffer;
    buffer.resize(clientSocket->pendingDatagramSize());
    QHostAddress sender;
    quint16 senderPort;
    buffer=word.toUtf8();
    clientSocket->writeDatagram(buffer.data(), QHostAddress::LocalHost, 8001 );
}
void uchat::readPendingDatagrams()
{
    while (clientSocketc->hasPendingDatagrams()) {
        QByteArray buffer;
        buffer.resize(clientSocketc->pendingDatagramSize());
        QHostAddress sender;
        quint16 senderPort;
        clientSocketc->readDatagram(buffer.data(), buffer.size(),&sender, &senderPort);
        ui->textBrowser->append(buffer.data());

    }

}
InformationsquelleAutor Arwen | 2013-11-21