le 05-05-2009 01:59 PM
Bonjour,
J'utilise les sockets pour échanger des informations entre mon pc et un serveur Web.
J'ouvre donc une socket sur le port 80 et envoie un message avec une en-tête HTTP.
Tout de suite après le serveur Web me renvoie une réponse contenant entre 3000 et 6000 caractère (en-tête HTTP incluse).
Mon problème c'est la lecture avec la fonction ClientTCPRead qui est appelé dans une Callback.
En effet soit j'appelle la fonction ClientTCPReaden lui passant un tableau de 10000 Car (pour être bien large) et je lui demande de me lire 10000 car et là pas de problème
je me retrouve avec le message de reponse du serveur (entre 3000 et 6000 car), mais cette méthode n'est pas très propre, car imaginons qu'un
jour la réponse fasse plus de 10000 car ?!
L'autre méthode est de faire une boucle du type :
dataSize = 1
while (dataSize > 0)
{
dataSize = ClientTCPRead (g_hconversation, &BufferReponse, 200, 1000);
if (dataSize > 0) InsertTextBoxLine (Panel, PANEL_MB_TEXTBOX_RECEPT, -1, BufferReponse);
}
Ducoup on fait des lectures par 200 car jusqu'à avoir tout lu.
Seulement le problème avec les serveur web c'est qu'une fois qu'ils ont envoyé la réponse il déconnecte tout de suite.
Ducoup je commence à lire avec ma boucle et au bout de quelques passages, vu que le serveur web vient de deconnecter puisqu'il
a tout envoyé, mais que moi lisant 200 car par 200 car, je n'ai pas encore vidé le buffer de la carte réseau,
dès que j'appelle la fonction "ClientTCPRead" j'ai une erreur "non fatale" qui me dit que que la connexion est "closed" !
Que me conseillez vous ?
De continuer comme cela car les erreurs de runtime non fatale ne posent pas de problème en mode release ?
ou faire autrement ?
Merci
Résolu ! Accéder à la solution.
le 05-20-2009 09:50 AM
Bonjour FredG,
La méthode n°2 semble être la plus adaptée.
L'erreur non fatale, ne pose en effet pas de problème.
Votre code pourrait éventuellement inclure la gestion de cette erreur (comme condition d'arrêt de votre boucle).
Cordialement,
Cedric F.
National Instruments France
>> Quels que soient votre profil et votre région, vous trouverez la journée qui vous correspond !