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 :

mettre plusieurs sources dans une table


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Par défaut mettre plusieurs sources dans une table
    Bonjour,

    je developpe en C sous Unix (Mac pour etre plus precis). Je n'ai pas trouve de reponse ou que ce soit a mon probleme, donc je pose enfin la question.
    J'effectue une demande de donnee par FTP, mais ces donnees arrivent en plusieurs paquets. Je dois donc reformer mon bloque de donnees (8Mo exactement) dans un pointeur qu'on me passe prealablement en parametre.
    voici ce que ca donne :


    Code C : 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
    void getData(char * buff)
    {
    ... // connection, demande du paquet de donnee, ouverture du port de reception des donnees, ...
     
    char * localBuff = buff;
    char dataReceived[DEFAULT_SIZE];
    int iResult;
    unsigned long total_size = 0;
    int dataReceivedLenght;
     
    while(1)
    {
    iResult = recv(socket, dataReceived, DEFAULT_SIZE, 0); // reception des donnees
     
    if(iResult > 0)
    {
    total_size += iResult;
     
    // maintenant copie des donnees dans mon buff
    memcpy(localBuff , dataReceived, iResult);
    localBuff += iResult; // deplacement du pointeur local
    }
    else
    {
    return;
    }
    }
    }

    Voila, j'espere etre assez precis et que quelqu'un saura m'aider.
    D'avance merci.

  2. #2
    Membre éprouvé
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2002
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 121
    Par défaut
    Bonjour,

    Bonjour,

    Je n'ai pas trouve de reponse ou que ce soit a mon probleme, donc je pose enfin la question.
    Sans vouloir être tatillons, je ne trouve pas vraiment de question dans ton poste ?

    En plus je suis un gros fénéant :p, donc je n'ai pas trop pris la peine de regarder en détail ton code pour détécter où tu pourrais éventuellement avoir un bug ou je ne sais quoi d'autre.

    J'ai une petite question :
    Qu'est ce qui te bloque exactement dans ton code ?
    - Est ce que tu reste bloqué a un endroit ?
    - Est ce que tu as un segfault ?


    Juste comme ca, si ta fonction rcv est bloquante, apres que tu ais lu le dernier paquet, ta fonction va attendre de recevoir quelque chose et ne passera pas par le return;


    Cordialement

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Par défaut
    Salut, merci de ta reponse, voici donc plus d'indication.

    Citation Envoyé par Lharuun Voir le message
    - Qu'est ce qui te bloque exactement dans ton code
    - Est ce que tu reste bloqué a un endroit ?
    la partie ou je dois copier les donnees recu dans un buffer contenant les donnees de la precedente reception.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    memcpy(localBuff , dataReceived, iResult);
    localBuff += iResult; // deplacement du pointeur local
    Citation Envoyé par Lharuun Voir le message
    - Est ce que tu as un segfault ?
    Pour des raisons technique qui serais trop longue a expliquer, je ne peux pas faire de pas a pas ou debug avec mon appli. Je ne peux que emettre des messages d'infos (comme si je faisait un printf) grace a une autre application qui le monitor.

    Citation Envoyé par Lharuun Voir le message
    Juste comme ca, si ta fonction rcv est bloquante, apres que tu ais lu le dernier paquet, ta fonction va attendre de recevoir quelque chose et ne passera pas par le return;
    Non, la reception des donnees est bonne. La fonction n'est pas bloquante et ne sort que lorsque le dernier paquet de donnee est arrive.


    Donc le probleme viens que je recoie tous mes paquets les uns apres les autres, mais je veux les pousser dans un seul buffer pour le renvoyer ensuite.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Par défaut
    Tu n'as toujours pas expliqué quel est le problème. D'autre part le code que tu postes n'est probablement ton vrai code puisque rcv() n'existe pas (c'est recv()).

    En passant c'est un peu bête de faire le recv() dans un buffer temporaire pour ensuite copir le buffer temporaire dans le buffer final. Tu pourrais faire le recv() directement dans le buffer final.

    D'ailleurs, il est alloué où le buffer final ? Tu es sûr qu'il a une taille suffisante ?

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Par défaut
    Citation Envoyé par matafan Voir le message
    D'autre part le code que tu postes n'est probablement ton vrai code puisque rcv() n'existe pas (c'est recv()).
    erreur de recopie de ma part, c'est bel et bien recv() qui est utilise.

    Citation Envoyé par matafan Voir le message
    En passant c'est un peu bête de faire le recv() dans un buffer temporaire pour ensuite copir le buffer temporaire dans le buffer final. Tu pourrais faire le recv() directement dans le buffer final.
    Pour des raisons de contraintes, les donnees que je recoie sont de taille limite, je dois donc les recevoir dans un buffer temporaire puis les pousser dans l'autre afin de former mon block de donnees de 8Mo.

    Citation Envoyé par matafan Voir le message
    D'ailleurs, il est alloué où le buffer final ? Tu es sûr qu'il a une taille suffisante ?
    Le buffer final est allouer avant et il ne m'est envoye que le pointeur vers ce buffer. Oui l'allocation est bien de 8Mo.


    Citation Envoyé par matafan Voir le message
    Tu n'as toujours pas expliqué quel est le problème.
    Citation Envoyé par Smiler
    Donc le probleme viens que je recoie tous mes paquets les uns apres les autres, et je veux les pousser dans un seul buffer
    donc le code qui suis ne fonctionne pas pour pousser mon buffer temporaire a la suite dans mon buffer final :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    memcpy(localBuff , dataReceived, iResult);
    localBuff += iResult; // deplacement du pointeur local

Discussions similaires

  1. [MySQL] mettre un tableau dans une table mysql
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/11/2006, 23h13
  2. Mettre un select dans une table
    Par bertlef dans le forum JDeveloper
    Réponses: 1
    Dernier message: 12/09/2006, 17h04
  3. Effacer plusieurs champs dans une table
    Par kurkaine dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/08/2006, 08h22
  4. Réponses: 3
    Dernier message: 07/06/2006, 12h05
  5. [SQL] calcul de plusieurs variables dans une table
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2006, 21h53

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