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 C Discussion :

Winsock 2, HTTP (C/C++) : lenteur anormale avec recv dans une boucle


Sujet :

Réseau C

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Tulutu
    Invité(e)
    Par défaut Winsock 2, HTTP (C/C++) : lenteur anormale avec recv dans une boucle
    Bonjour,

    Je développe un petit programme qui a pour but de résoudre une épreuve informatique (partez pas je vous demande pas de la résoudre ), tout est bon sauf qu'une lenteur avec recv() me gêne, étant donné que le programme doit être rapide (- d'une seconde).

    J'utilise winsock pour executer ma requête HTTP, tout marche bien, sauf quand il s'agit de recevoir la réponse du serveur (il envoie une page).

    Si j'appelle recv en lui donnant un gros buffer, tout va très bien. Sauf que je cherche à faire ça plus proprement (je pense pas qu'un navigateur s'amuse à recevoir les pages dans un buffer de taille prédéfinie), et donc je place mon recv dans une boucle, pour recevoir partie par partie. Tout marche comme il faut, mais mon programme ne fait rien pendant au moins 10 secondes, alors que les données ont déjà été reçues.

    Le code responsable :
    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
    29
    30
     
    	char * buffer = new char[BUFLEN];
     
    	do
    	{
    		iResult = recv( csocket, buffer, BUFLEN, 0 );
     
    		if( iResult > 0 )
    		{
                            //recvbuffer est de type std::string
    			recvbuffer.append( buffer, iResult );
    			ZeroMemory(buffer, BUFLEN);
    		}
    		else if( iResult == 0 )
    		{
    			std::cout << "Connection closed" << std::endl;
    		}
    		else
    		{
    			std::cout << "Error : recv(), code : " << WSAGetLastError() << std::endl;
    			shutdown( csocket, SD_BOTH );
    			closesocket( csocket );
    			WSACleanup();
    		}
    	}
    	while( iResult > 0 );
     
    	delete buffer;
     
    	std::cout << recvbuffer.c_str() << std::endl;

    Si quelqu'un voit le problème
    Merci.

    PS : j'ai cherché mais n'ai pas trouvé de topic similaire, par contre, savez-vous si le '\n' est envoyé à la toute fin de la réponse ? Je me demande si ça vient d'ici, en tout cas l'affichage se fait correctement.
    Dernière modification par Tulutu ; 05/08/2011 à 18h54.

Discussions similaires

  1. [XL-2007] Problème avec If dans une boucle
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/06/2011, 08h48
  2. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  3. thread avec return dans une boucle
    Par Tanebisse dans le forum Général Java
    Réponses: 19
    Dernier message: 19/05/2008, 17h42
  4. [VBA-E] pb avec offset dans une boucle
    Par davidlb dans le forum Excel
    Réponses: 4
    Dernier message: 01/04/2007, 09h15
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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