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

Réseau Discussion :

Transférer un fichier de C# à Qt


Sujet :

Réseau

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut Transférer un fichier de C# à Qt
    Hello EveryBody,

    Voici mon petit problème qui ne cesse de m'enbeter

    J'envoie le contenu d'un fichier depuis c# par voie TCP IP (serveur) à un client QtCreator.

    Mon probleme : le client ne recoit pas ces données !!!

    J'ai envoyé depuis le serveur à un hyperterminal et la je reussit a les avoir donc le probleme viendrait de Qt.

    Je pense auoir un souci avec la taille du message qui ne semble pas etre correcte donc Qt passe par les return et ne fait rien...

    comment faudrait il programmer qt pr recevoir ces données... Une idée???
    Merci pour votre aide

    PS : de Qt à Qt ca marche
    deC# à C# ca marche
    Un serveur Qt qui envoie a un client C# ca marche

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    26 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 26 772
    Par défaut


    Un peu de code ne serait pas sans nous aider : comment reçois-tu des données ? comment les envoies-tu ?
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut
    Salutttt,

    desolé lol


    PARTIE QT CLIENT : reception de données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    void Client::readData()
    {
        //The protocol is based on QDataStream
        //we start by creating a stream object
        QDataStream in(tcpSocket); //l'objet "in" va nous permettre de lire le contenu du sous-paquet que vient de recevoir la socket du client.
        qDebug()<< " in: " << in <<endl;
     
        in.setVersion(QDataStream::Qt_4_0);
     
        if (blockSize == 0) // Si on ne connaît pas encore la taille du message, on essaie de la récupérer
        {
           if (tcpSocket->bytesAvailable() < (int)sizeof(quint16))// On n'a pas reçu la taille du message en entier
            {
                return;
            }
     
           in >> blockSize;// 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 (tcpSocket->bytesAvailable() < blockSize)// Si on n'a pas encore tout reçu, on arrête la méthode
        {
            statusLabel->setText("reception non entiere");
     
            return;
        }
    // Si ces lignes s'exécutent, c'est qu'on a reçu tout le message : on peut le récupérer !
        QByteArray nextData;
        in >> nextData;
          // ici on a enfin recu le message du client
        statusLabel->setText("here");
        if (nextData == currentData) {
            QTimer::singleShot(0, this, SLOT(requestNewData()));
            return;
        }
     
        currentData = nextData;
     
        // creation of datareception.stm and copy of data
        QString filename="D:/Data/tcp ip/QTandTCP-ClienQt-serverQt-SendFile-3/Qtclient/reception.stm";
        QFile file( filename );
        if ( file.open(QIODevice::ReadWrite) )
        {
            QTextStream stream( &file );
            stream << currentData << endl;
        }
     
        //QLabel::setText() to display the data
        statusLabel->setText(currentData);
        getDataButton->setEnabled(true);
     
    }
    Partie serveur C# :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
     
       public  void SendFile(string fileName)
            {
                TcpListener server = new TcpListener(IPAddress.Any, Convert.ToInt16(nudPortName.Text));
                server.Start();
                //MessageBox.Show("Server running...");
     
                    TcpClient client = server.AcceptTcpClient();
                    NetworkStream clientStream = client.GetStream();
     
                    string filePath = "";
     
                    fileName = fileName.Replace("\\", "/");
                    while (fileName.IndexOf("/") > -1)
                    {
                        filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
                        fileName = fileName.Substring(fileName.IndexOf("/") + 1);
                    }
     
                    byte[] fileData = File.ReadAllBytes(filePath + fileName);
     
                    // Send data to the client.
                    clientStream.Write(fileData, 0, fileData.Length);
                    clientStream.Close();
     
                    // Stop listening for new clients.
                    //server.Stop();
     
            }

    MERCI

  4. #4
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Pour moi QDataStream serialize les données et par conséquent C# ne peut lire ce format binaire.

    A mon avis il ne faut pas que tu passes pas un QDataStream. Il faut que tu implémentes ton propre protocole de communication identique aussi bien en C# qu'avec Qt. Seulement à ce moment là tout devrait fonctionner.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  5. #5
    Membre averti
    Homme Profil pro
    Ergonome
    Inscrit en
    Février 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ergonome
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2011
    Messages : 50
    Par défaut
    ok merci bcp. je vais essayer et je te retiens au courant

    houps, une derniere question : comment se fait t il que dans l'autre sens cela fonctionne?

    c'est a dire c# qui recoit les donnée et non qt

    merci

  6. #6
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    il ne manquerai pas la taille du fichier sur 16 bits dans ce qu'envoie c#?

Discussions similaires

  1. [FTP] Transférer un fichier en SFTP
    Par Thom@s dans le forum Langage
    Réponses: 3
    Dernier message: 24/01/2006, 14h33
  2. transférer un fichier de manière sécurisé par ftp
    Par jack_1981 dans le forum Développement
    Réponses: 2
    Dernier message: 22/12/2005, 14h15
  3. Réponses: 4
    Dernier message: 19/12/2005, 11h31
  4. Transférer des fichiers avec un câble réseau
    Par denis finch dans le forum Développement
    Réponses: 5
    Dernier message: 08/11/2005, 16h08

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