IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Probleme Réseau C++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2012
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Probleme Réseau C++
    Bonjour, j'ai un problème avec mon application qui fonctionnais très bien jusqu’à maintenant.
    Je n'ai pas changé le code.
    Et j'ai pourtant une erreur dans mon code.
    Les transferts réseaux s’exécutent correctement sauf lorsque je veux écrire dans le fichier.

    Voici mon code :

    Main Client :


    #include <QtGui>
    #include <FenClient.h>
    #include <QApplication>

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

    QApplication app(argc, argv);

    FenClient fen;


    fen.show();



    return app.exec();
    }



    FenClient :


    #include "FenClient.h"
    #include "Pass.h"

    #include <QTreeWidget>

    FenClient::FenClient()
    {

    resize(1000, 800);

    // Création et affichage de la fenetre permettant le choix du repertoire de téléchargement

    // Création des widget qui affichent l'arbre avec les données de l'ordinateur
    QVBoxLayout *layout = new QVBoxLayout;
    modele = new QDirModel;
    vue = new QTreeView;
    vue->setModel(modele);

    // Création du label qui demande de choisir un fichier
    labelChoixRepertoire = new QLabel();
    labelChoixRepertoire->setText("Choissisez le dossier dans le quel vous souhaitez enregistrer vos fichiers");

    // CRéation bouton
    QPushButton *button = new QPushButton();
    button->setText("Choisir ce repertoire");

    // Insertion dans les layouts
    layout->addWidget(labelChoixRepertoire);
    layout->addWidget(vue);
    layout->addWidget(button);

    setLayout(layout);

    connect(button,SIGNAL(clicked()),this,SLOT(fichierChoisie()));

    }

    void FenClient::fichierChoisie(){

    // Si le fichier choisi est un fichier ou un disque dur on demande de choisir un dossier

    if(modele->fileInfo(vue->currentIndex()).isFile() || modele->fileInfo(vue->currentIndex()).isRoot() ){

    labelChoixRepertoire->setText("Ceci n'est pas un dossier");

    }

    // Sinon on recupere le nom du fichier choisie et on l'affect à la variable permettant d'ecriren dans un dossier puis on
    // créer la fenetre de connection au serveur


    else {

    // On ferme la fenetre
    repertoireDesFichiers = modele->filePath(vue->currentIndex())+"/";

    close();

    // Création de la fenetre

    QWidget *fen = new QWidget();
    fen->setWindowIcon(QIcon(QApplication::applicationDirPath()+"/client.jpg"));
    fen->resize(1000,800);

    // Création des layout

    layout = new QVBoxLayout;
    QHBoxLayout *layoutConfigServeur = new QHBoxLayout();
    QHBoxLayout *layoutPath = new QHBoxLayout();


    fen->setLayout(layout);


    // Création de l'arbre

    tree = new QTreeWidget(this);
    tree->setVisible(false);

    boutonConnecter = new QPushButton();
    boutonConnecter->setText("Se connecter");

    //Initialisation des widgets

    socket = new QTcpSocket(this);
    labelText = new QLabel();




    telechargement = new QLabel();


    // On ajoute nos widgets au layouts
    // Configuration serveur
    layout->addLayout(layoutConfigServeur);
    layout->addLayout(layoutPath);

    QLabel *labelNomServeur = new QLabel();
    labelNomServeur->setText("Adresse du serveur");
    QLabel *labelPorServeur = new QLabel();
    labelPorServeur->setText("N° de port du serveur");
    adresseServeur = new QLineEdit();
    adresseServeur->setText("127.0.0.1");
    portServeur = new QSpinBox();
    portServeur->setMaximum(100000);
    portServeur->setValue(50885);

    layoutConfigServeur->addWidget(labelNomServeur);
    layoutConfigServeur->addWidget(adresseServeur);
    layoutConfigServeur->addWidget(labelPorServeur);

    layoutConfigServeur->addWidget(portServeur);
    layoutConfigServeur->addWidget(boutonConnecter);


    layout->addWidget(telechargement);
    layout->addWidget(labelText);

    setLayout(layout);
    connect(boutonConnecter,SIGNAL(clicked()),this,SLOT(seConnecter()));
    connect(socket, SIGNAL(readyRead()), this, SLOT(donneesRecues()));
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(erreurSocket(QAbstractSocket::SocketError)));

    tailleMessage = 0;


    fen->show();

    }
    }



    void FenClient::seConnecter(){


    socket->abort(); // On désactive les connexions précédentes s'il y en a
    socket->connectToHost(adresseServeur->text(), portServeur->value()); // On se connecte au serveur demande

    pass = new Pass();
    pass->setFenClient(this);
    pass->show();

    }


    void FenClient::itemSelectionne(){


    // Si aucun fichier est en cour de téléchargement

    if(telechargement->text() != "Téléchargement en cours..."){

    // On recupere l'item clicker et on envoye au serveur le nom du fichier que l'on veux télécharger
    for(int i = 0; i < tree->selectedItems().size(); i++ ){

    // Si on a selectionné un fichier

    if(tree->selectedItems().at(i)->isSelected() == true){

    telechargement->setText("Téléchargement en cours...");

    // On stock le nom récupérer dans une variable
    QString nomDufichierATelecharger = tree->selectedItems().at(i)->text(i);

    nomDufichierATelecharger.append("&");

    // objet envoyé sur le réseau contenant les informations
    QByteArray paquet;

    QDataStream out(&paquet, QIODevice::WriteOnly);
    // On récupere le nom de l'item qui a été selectionné
    // On écrit 0 au début du paquet pour réserver la place pour écrire la taille

    out << (quint64) 0;
    // On ajoute le nom notre item a notre paquet
    out << nomDufichierATelecharger;
    out.device()->seek(0); // On se replace au début du paquet
    out << (quint64) (paquet.size() - sizeof(quint64)); // On écrase le 0 qu'on avait réservé par la longueur du message

    socket->write(paquet); // On envoie le paquet
    qDebug() << "nomfichier"+nomDufichierATelecharger;
    itemATelecharger = nomDufichierATelecharger;

    }
    }
    }
    else{
    telechargement->setText("Veuilliez attendre la fin du téléchargement avant d'en commencer un autre ");
    }
    }



    void FenClient::deconnexionClient(){

    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
    return;


    socket->deleteLater();
    }

    void FenClient::donneesRecues()
    {
    qDebug() << "Les données sont bien reçu";

    /* Même principe que lorsque le serveur reçoit un paquet :
    On essaie de récupérer la taille du message
    Une fois qu'on l'a, on attend d'avoir reçu le message entier (en se basant sur la taille annoncée tailleMessage)
    */


    // On verrifie si un mot de pass est demandé

    qDebug()<< "J'ai reçu les données";
    boutonConnecter->setEnabled(false);

    QDataStream in(socket);

    if (tailleMessage == 0)
    {
    if (socket->bytesAvailable() < (int)sizeof(quint64))
    return;

    in >> tailleMessage;
    }

    qDebug << "socket"+socket->bytesAvailable();
    qDebug << "taille"+tailleMessage;



    // Si on arrive jusqu'à cette ligne, on peut récupérer le message entier



    if(pass->isVisible()){


    QString messageRecu;
    in >> messageRecu;
    qDebug() << "mON PASS"+messageRecu;
    passServeur = messageRecu;


    if(messageRecu == "PassCorrect"){

    // On ferme la fenetre et on envoyer le nom du repertoire rechercher
    pass->close();
    receptionList = "ok";


    qDebug() << "Envoyer Message";

    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    // On prépare le paquet à envoyer
    QString messageAEnvoyer = "CHEMIN";

    out << (quint64) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint64) (paquet.size() - sizeof(quint64));

    socket->write(paquet); // On envoie le paquet

    }
    else{
    }
    qDebug() << "list"+receptionList;
    }


    else if (receptionList == "ok"){

    receptionList = "fini";
    QDataStream in(socket);

    if (tailleMessage == 0)
    {
    if (socket->bytesAvailable() < (int)sizeof(quint64))
    return;

    in >> tailleMessage;
    }

    qDebug()<<socket->bytesAvailable();
    qDebug()<<tailleMessage;

    if (socket->bytesAvailable() < tailleMessage)
    return;

    qDebug() << "Il passe dans la methode";
    // Si le message reçu est faux

    QList<QString> messageRecu;
    in >> messageRecu;

    QString pass;
    in >> pass;
    qDebug() << "Mot de pass"+pass;
    qDebug() << messageRecu;

    tree->setVisible(true);

    telechargement->setText("Double clikez sur un fichier pour le télécharger");



    QString listDesMessages;
    QTreeWidgetItem *item ;
    QTreeWidgetItem *item2 ;

    QString dossier = messageRecu.at(messageRecu.size()-1);
    item = new QTreeWidgetItem(tree,0);
    tree->selectedItems();
    item->setText(0,dossier);
    item->setIcon(0,QIcon(QApplication::applicationDirPath()+"/dossierIcon.jpg"));
    qDebug() << QApplication::applicationDirPath();
    connect(tree,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(itemSelectionne()));


    for(int i=0; i<messageRecu.size();i++){
    qDebug() <<"Ma list"+messageRecu.at(i);
    }

    // On recupere la liste de messages qu'on affiche dans l'arborescencev
    for(int i=0; i<messageRecu.size()-1;i++){

    item2 = new QTreeWidgetItem(item,0);

    item2->setText(0,messageRecu.at(i));

    item2->setIcon(0,QIcon(QApplication::applicationDirPath()+"/fichierIcon.jpg"));

    tree->addTopLevelItem(item);

    }

    layout->addWidget(tree);

    qDebug() <<"liste2"+ listDesMessages;

    labelText->setText(listDesMessages);
    // On affiche le message sur la zone de Chat
    // labelText->setText(messageRecu);

    // On remet la taille du message à 0 pour pouvoir recevoir de futurs messages
    }


    else if(receptionList == "fini"){

    QDataStream in(socket);

    if (tailleMessage == 0)
    {
    if (socket->bytesAvailable() < (int)sizeof(quint64))
    return;

    in >> tailleMessage;
    }

    if (socket->bytesAvailable() < tailleMessage)
    return;

    // Si on arrive jusqu'à cette ligne, on peut récupérer le message entier

    QByteArray message;
    in >> message;

    qDebug() << message.size();

    itemATelecharger.remove(itemATelecharger.size()-1,1);
    qDebug () << repertoireDesFichiers+itemATelecharger;

    QFile fichier2(repertoireDesFichiers+itemATelecharger);

    if(fichier2.open(QIODevice::WriteOnly | QIODevice::Truncate))
    {
    int i;
    for(i = 0 ; i < message.size() ; i++)

    fichier2.putChar(message.at(i));

    qDebug()<<"Il passe";
    fichier2.close();
    telechargement->setText("Téléchargement Terminé");

    tailleMessage = 0;

    }

    }
    tailleMessage = 0;


    }

    void FenClient::erreurSocket(QAbstractSocket::SocketError erreur)
    {
    switch(erreur) // On affiche un message différent selon l'erreur qu'on nous indique
    {
    case QAbstractSocket::HostNotFoundError:
    telechargement->setText(tr("<em>ERREUR : le serveur n'a pas pu être trouvé. Vérifiez l'IP et le port.</em>"));
    break;
    case QAbstractSocket::ConnectionRefusedError:
    telechargement->setText(tr("<em>ERREUR : le serveur a refusé la connexion. Vérifiez si le programme \"serveur\" a bien été lancé. Vérifiez aussi l'IP et le port.</em>"));
    break;
    case QAbstractSocket::RemoteHostClosedError:
    telechargement->setText(tr("<em>ERREUR : le serveur a coupé la connexion.</em>"));
    break;
    default:
    telechargement->setText(tr("<em>ERREUR : ") + socket->errorString() + tr("</em>"));
    }

    boutonConnecter->setEnabled(true);
    }

    void FenClient::setPassword(QString aPassword){


    verrificationPassword(aPassword);
    }


    void FenClient::verrificationPassword(QString aPassword){


    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    // On prépare le paquet à envoyer

    out << (quint64) 0;
    out << aPassword;
    out.device()->seek(0);
    out << (quint64) (paquet.size() - sizeof(quint64));

    socket->write(paquet); // On envoie le paquet
    qDebug() <<"passeword"+aPassword;

    }

    QString FenClient::getMotDePassServeur(){

    return passServeur;
    }




    Pass :


    #include "Pass.h"

    Pass:ass(){

    // On paramettre la fenetre
    resize(500,200);
    setWindowTitle("Demande d'autorisation");
    layout = new QVBoxLayout();
    setLayout(layout);

    // On créer le label le le QLineEdit pour recuperer le mot de passe et le boouton de validation


    QLabel *labelPassword = new QLabel();
    labelPassword->setText("Veuiller entrer le mot de passe");
    password = new QLineEdit();
    password->setEchoMode(QLineEdit:assword);
    QPushButton *valider = new QPushButton();
    valider->setText("Valider");

    layout->addWidget(labelPassword);

    layout->addWidget(password);
    layout->addWidget(valider);

    label = new QLabel();
    layout->addWidget(label);

    connect(valider,SIGNAL(clicked()),this,SLOT(getPassword()));
    }

    void Pass::setFenClient(FenClient *aFen){

    fen = aFen;
    }

    void Pass::getPassword(){

    fen->setPassword(password->text());

    if(fen->getMotDePassServeur() != password->text() || fen->getMotDePassServeur() == "" ){
    label->setText("Mot de passe incorrect");
    }
    }

    void Pass::keyPressEvent(QKeyEvent* event) {
    getPassword();
    }


    FenClient.h :

    #ifndef FENCLIENT_H
    #define FENCLIENT_H

    #include <QtGui>
    #include <QtNetwork>

    class Pass;

    class FenClient : public QWidget
    {

    Q_OBJECT

    public:
    FenClient();
    QLabel *labelText;
    QTcpServer *serveur;
    quint64 tailleMessage;
    QTcpSocket *socket;
    QList<QTcpSocket *> clients;
    QPushButton *boutonConnecter;
    QPushButton *boutonRemonter;
    QString itemATelecharger;

    QLineEdit *adresseServeur;
    QSpinBox *portServeur;

    QLineEdit *message;
    QList<QString *> infosServeur;
    QVBoxLayout *layout;
    QTreeWidget *tree;
    QLabel *telechargement;
    Pass *pass;
    QString repertoireDesFichiers;

    QString receptionList;
    QString passServeur;
    QString getMotDePassServeur();

    QTreeView *vue;
    QDirModel *modele;

    QLabel *labelChoixRepertoire;

    void setPassword(QString aPassword);

    private slots:

    void erreurSocket(QAbstractSocket::SocketError erreur);
    void seConnecter();
    void deconnexionClient();
    void donneesRecues();
    void itemSelectionne();
    void verrificationPassword(QString aPassword);
    void fichierChoisie();

    private:
    };

    #endif // FENCLIENT_H




    Pass.h :

    #ifndef PASS_H
    #define PASS_H
    #include <QtGui>
    #include "FenClient.h"
    #include <QKeyEvent>


    class Pass : public QWidget
    {

    Q_OBJECT

    public:

    Pass();
    QLabel *label;
    FenClient *fen;
    QLineEdit *password;
    QVBoxLayout *layout;
    void setFenClient(FenClient *aFen);
    void getMotDePassServeur();
    void keyPressEvent(QKeyEvent* event);
    //void keyReleaseEvent(QKeyEvent* event);

    private slots:
    void getPassword();
    private:


    };

    #endif // PASS_H





    Le serveur


    Serveur Main :


    #include <QApplication>
    #include "FenServeur.h"

    int main(int argc, char* argv[])
    {
    QApplication app(argc, argv);

    FenServeur fenetre;




    fenetre.show();
    return app.exec();
    }



    FenServeur :


    #include "FenServeur.h"

    FenServeur::FenServeur()
    {

    etatServeur = new QLabel();
    QHBoxLayout *layout = new QHBoxLayout();
    etatServeur->setText("Test");
    layout->addWidget(etatServeur);
    setLayout(layout);
    pass = true;
    serveur = new QTcpServer(this);

    if (!serveur->listen(QHostAddress::Any, 50885)) // Démarrage du serveur sur toutes les IP disponibles et sur le port 50585
    {
    // Si le serveur n'a pas été démarré correctement
    etatServeur->setText(tr("Le serveur n'a pas pu être démarré. Raison :<br />") + serveur->errorString());
    }
    else
    {
    // Si le serveur a été démarré correctement
    etatServeur->setText(tr("Le serveur a été démarré sur le port <strong>") + QString::number(serveur->serverPort()) + tr("</strong>.<br />Des clients peuvent maintenant se connecter."));
    connect(serveur, SIGNAL(newConnection()), this, SLOT(nouvelleConnexion()));

    }

    pass = true;
    tailleMessage = 0;

    }



    void FenServeur::fichierChoisie(){

    qDebug() << modele->filePath(vue->currentIndex());


    }

    void FenServeur::nouvelleConnexion()
    {
    etatServeur->setText("Coonexion d'un nouveau client");
    QTcpSocket *nouveauClient = serveur->nextPendingConnection();
    clients << nouveauClient;// On ajoute le nouveau client


    connect(nouveauClient,SIGNAL(readyRead()),this,SLOT(cheminRepertoire()));
    // connect(nouveauClient, SIGNAL(readyRead()), this, SLOT(donneesRecues()));

    }


    void FenServeur::cheminRepertoire(){


    // 1 : on reçoit un paquet (ou un sous-paquet) d'un des clients
    qDebug() << "donnéesreçu";
    // On détermine quel client envoie le message (recherche du QTcpSocket du client)
    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
    return;


    // Si tout va bien, on continue : on récupère le message
    QDataStream in(socket);
    if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
    {
    if (socket->bytesAvailable() < (int)sizeof(quint16)) // On n'a pas reçu la taille du message en entier
    return;

    in >> tailleMessage; // Si on a reçu la taille du message en entier, on la récupère

    }

    // Si on connaît la taille du message, on vérifie si on a reçu le message en entier
    if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas encore tout reçu, on arrête la méthode
    return;


    // Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
    QString messageRecu;
    in >> messageRecu;

    qDebug() << messageRecu;
    message = messageRecu ;
    qDebug()<< "MessageRecurepertoire"+messageRecu;
    qDebug() << message;

    // 2 : on renvoie le message à tous les clients
    etatServeur->setText(messageRecu);

    // 3 : remise de la taille du message à 0 pour permettre la réception des futurs messages
    tailleMessage = 0;


    // On verrifie si le serveur est proteger par un mot de pass


    if(pass == true){

    qDebug()<< "passEnvoyé test"+messageRecu;

    if(messageRecu == "691KJO"){

    qDebug() << "Message691kjo"+messageRecu;
    // On envoyer les données au client pour lui dire que le mot de pass est bon
    qDebug()<< "testpassok";
    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    // On prépare le paquet à envoyer
    QString messageAEnvoyer = "PassCorrect";

    out << (quint64) 0;
    out << messageAEnvoyer;
    out.device()->seek(0);
    out << (quint64) (paquet.size() - sizeof(quint64));

    for (int i = 0; i < clients.size(); i++)
    {
    qDebug() << "Envoye des donnés au client ";
    clients[i]->write(paquet);
    }

    }
    }


    if(messageRecu.at(messageRecu.size()-1) == '&'){
    messageRecu.remove(messageRecu.size()-1,1);

    QFile fichier1("C:/ServeurPTI/"+messageRecu);
    qDebug()<< "C:/ServeurPTI/"+messageRecu;
    QByteArray array;

    if(fichier1.open(QIODevice::ReadOnly))
    {
    // pour créer le fichier test

    qDebug()<<"Passe dans la création du fichier";
    char caractere = 0;

    // par un QByteArray

    while(fichier1.getChar(&caractere))
    {
    array += caractere;
    }

    qDebug() << array.size();


    fichier1.close();
    }

    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);
    // On récupere le nom de l'item qui a été selectionné
    // On écrit 0 au début du paquet pour réserver la place pour écrire la taille

    out << (quint64) 0;
    // On ajoute le nom notre item a notre paquet
    out << array;
    out.device()->seek(0); // On se replace au début du paquet
    out << (quint64) (paquet.size() - sizeof(quint64)); // On écrase le 0 qu'on avait réservé par la longueur du message

    for (int i = 0; i < clients.size(); i++)
    {
    qDebug() << "Envoye des donnés au client ";
    clients[i]->write(paquet);
    }


    }

    else{

    qDebug()<< "TestElse";
    dossierParent = "C:/ServeurPTI/" ;
    for(int i = 0; i < fichiersList.size();i++){
    fichiersList.removeAt(i);
    }

    qDebug() << "DossierParent"+dossierParent;

    rechercheDonnees(dossierParent);
    fichiersList.append(dossierParent);

    // On recupere les données du serveur

    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    // On prépare le paquet à envoyer
    QString messageAEnvoyer = message;
    message ="Mon message";
    etatServeur->setText(message);
    qDebug() << "Mon message"+message;

    out << (quint64) 0;
    out << fichiersList;
    out.device()->seek(0);
    out << (quint64) (paquet.size() - sizeof(quint64));


    for(int i=0; i<fichiersList.size();i++){
    }
    for (int i = 0; i < clients.size(); i++)
    {
    clients[i]->write(paquet);
    }
    }


    }
    // On recupere les données du fichier


    void FenServeur::donneesRecues()
    {


    // 1 : on reçoit un paquet (ou un sous-paquet) d'un des clients
    qDebug() << "donnéesreçu";
    // On détermine quel client envoie le message (recherche du QTcpSocket du client)
    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
    return;

    // Si tout va bien, on continue : on récupère le message
    QDataStream in(socket);

    if (tailleMessage == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
    {
    if (socket->bytesAvailable() < (int)sizeof(quint16)) // On n'a pas reçu la taille du message en entier
    return;

    in >> tailleMessage; // Si on a reçu la taille du message en entier, on la récupère
    }

    // Si on connaît la taille du message, on vérifie si on a reçu le message en entier
    if (socket->bytesAvailable() < tailleMessage) // Si on n'a pas encore tout reçu, on arrête la méthode
    return;


    // Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !

    QString messageRecu;
    in >> messageRecu;

    qDebug() << messageRecu;
    message = messageRecu ;
    qDebug()<< "MessageRecu"+messageRecu;
    qDebug() << message;

    // 2 : on renvoie le message à tous les clients
    etatServeur->setText(messageRecu);

    // 3 : remise de la taille du message à 0 pour permettre la réception des futurs messages
    tailleMessage = 0;

    // On recupere les données du fichier


    // on ouvre le premier fichier

    QFile fichier1("C:/Test/Test.txt");
    if(fichier1.open(QIODevice::ReadOnly) )
    {

    char caractere = 0;

    QByteArray array;

    while(fichier1.getChar(&caractere))
    {
    array += caractere;
    qDebug() << caractere;
    }



    fichier1.close();

    QByteArray paquet;
    QDataStream out(&paquet, QIODevice::WriteOnly);

    out << (quint64) 0;
    out << array;
    out.device()->seek(0);
    out << (quint64) (paquet.size() - sizeof(quint64));

    for (int i = 0; i < clients.size(); i++)
    {
    qDebug() << "Envoye des donnés au client ";
    clients[i]->write(paquet);
    }
    }
    }

    void FenServeur::deconnexionClient()
    {
    /*
    envoyerATous(tr("<em>Un client vient de se déconnecter</em>"));

    // On détermine quel client se déconnecte
    QTcpSocket *socket = qobject_cast<QTcpSocket *>(sender());
    if (socket == 0) // Si par hasard on n'a pas trouvé le client à l'origine du signal, on arrête la méthode
    return;

    clients.removeOne(socket);

    socket->deleteLater();
    */
    }


    void FenServeur::rechercheDonnees(QString sousRepertoire){




    QFileInfo qmake (QString ("C") );

    QDir dir(sousRepertoire);



    foreach(qmake, dir.entryInfoList()) {

    if(qmake.isDir()==true){

    if(qmake.fileName() != ".."){

    if(qmake.fileName() != "."){

    QString path = qmake.filePath();
    rechercheDonnees(path);
    }
    }
    }
    else{
    fichiersList.append(qmake.fileName()); qDebug () << "Fichier :"+qmake.fileName();
    }
    }



    }

    void FenServeur::envoyerATous(const QString &message)
    {

    }



    FenServeur.h :


    #ifndef HEADER_FENSERVEUR
    #define HEADER_FENSERVEUR

    #include <QtGui>
    #include <QtNetwork>


    class FenServeur : public QWidget
    {
    Q_OBJECT

    public:
    FenServeur();

    void rechercheDonnees(QString sousRepertoire);

    void envoyerATous(const QString &message);

    private slots:
    void cheminRepertoire();
    void nouvelleConnexion();
    void donneesRecues();
    void deconnexionClient();
    void fichierChoisie();

    private:
    QLabel *etatServeur;
    QPushButton *boutonQuitter;
    bool pass;
    QString message;
    QTcpServer *serveur;
    QList<QTcpSocket *> clients;
    QList<QString> fichiersList;
    quint64 tailleMessage;
    QString dossierParent;
    QTreeView *vue;
    QDirModel *modele;

    };

    #endif




    Mais le téléchargement ne s’effectue plus, il reste sur téléchargement en cour...

  2. #2
    Membre régulier
    Inscrit en
    Juin 2008
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 140
    Points : 103
    Points
    103
    Par défaut
    Mettre ton code dans les balises codes va aider à la lecture.

Discussions similaires

  1. Probleme réseau sur un poste connecté en réseau local
    Par titounnette dans le forum Administration
    Réponses: 1
    Dernier message: 19/11/2009, 16h27
  2. Probleme réseau suite à retour veille
    Par divot dans le forum Windows 7
    Réponses: 8
    Dernier message: 05/11/2009, 08h24
  3. tomcat 5.5 / httpurlconnection / probleme réseau
    Par loucs93 dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 17/12/2008, 11h18
  4. probleme réseau : ping a sens unique
    Par be_on_edge dans le forum Développement
    Réponses: 14
    Dernier message: 18/09/2004, 10h01
  5. Probleme de réseau avec aol
    Par Mut dans le forum Développement
    Réponses: 22
    Dernier message: 26/05/2003, 23h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo