fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
19 juil. 2007 à 10:55
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
19 juil. 2007 à 15:53
Salut a tous,
Je réalise un ptit programme au sein duquel je me connecte a un serveur distant, afin de récupérer via une methode GET des informations necessaires a la generation de différents ecrans...
Mon probleme est celui-ci : je me connecte une premiere fois a la servlet distante, puis lorsque je veux afficher mon deuxieme ecran et que je fais un deuxieme appel, cela ne marche pas a chaque fois. J'ai quatre ecrans "sous le coude", et je n'arrive jamais non plus a acceder au 4eme voire au 3eme lors du lancement d'une meme application.
J'aimerais donc savoir coment je pourrais adapter mon code, afin d'avoir une boucle me permettant d'essayer de se reconnecter jusqu'a ce que cela fonctionne...
Voici le code :
// recuperation du contenu via l'API Winsock
char* RecupererContenuURL()
{
WSADATA WSAData;
int iResult = WSAStartup(MAKEWORD(2,0), &WSAData);
if (iResult != NO_ERROR)
MessageBox(NULL, TEXT("Error at WSAStartup()"),TEXT("Erreur"),MB_OK);
SOCKET sock;
SOCKADDR_IN sin;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
MessageBox(NULL, TEXT("Error at socket"),TEXT("Erreur"),MB_OK);
sin.sin_addr.s_addr = inet_addr(adresseIpFichierIni); // adresse IP a laquelle se connecter
sin.sin_family = AF_INET;
sin.sin_port = htons(atoi(portFichierIni)); // port HTTP.
if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR) // on se connecte sur le serveur.
MessageBox(NULL,TEXT("Erreur Reception Donnees"),TEXT("Erreur"),MB_OK); // si probleme on le signale -> c'est ici ou cela plante souvent
send(sock, canal, strlen(canal), 0); // on envoie la requête HTTP.
recv(sock, cBuffligne, sizeof(cBuffligne), 0); // reception des donnees dans le buffer
closesocket(sock); // on ferme le socket.
WSACleanup();
...recuperation de la variable retour
return retour; // renvoi du resultat
}
A signaler que lorsque ca plante, si je relance mon appli, alors il va bien m'afficher l'ecran suivant (cest a dire celui que j'etais censé avoir lors du plantage...), mais va encore planter peut etre deux ecrans plus tard...
J'ai essayer des boucles while sans succes...
Merci d'avance!
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 19 juil. 2007 à 15:00
Salut !
Le problème vien du messagebox, c'est pas "Erreur Reception Donnees" mais "Erreur Connexion" !
Je rigole bien sur.
Essayes d'ajouter un memset(&sin, 0, sizeof(sin)); avant le remplissage de ta structure.
Cette structure ne contient pas que 3 champs, si tu mets pas les champs à 0 ils risquent de configurer des trucs inattendus.
Sinon, à la place de tes messagesbox, tu devrais construire un message un peu plus precis via les fonctions GetLastError et FormatMessage. Parce que c'est bien de savoir que ya eu une erreur, mais c'est mieu de savoir pourquoi il y a eu une erreure. Ca t'indira peut-être pourquoi ta fonction échoue.
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 juil. 2007 à 15:10
Salut,
Euh j'ai rajouté le memset avant
sin.sin_addr.s_addr = inet_addr(adresseIpFichierIni); ...
Mais ca ne change rien...
Sinon je n'ai jamais utilisé le formatage d'erreur, je vais essayer de voir ça.
As tu une autre idée? dois je faire autre chose que le memset?
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20133 19 juil. 2007 à 15:33
GetLastError te retourne un code erreur a utiliser dans FormatMessage pour avoir un texte en clair. Sinon, fournit avec VS, il y a un tools, "errlook.exe" ou quelque chose comme ca. Tu lui donne ton code erreur et il te sort la phrase associée.
En l'occurence, l'erreur 10049 est catégorisée par ce message :
"L'adresse demandée n'est pas valide dans son contexte."
Vous n’avez pas trouvé la réponse que vous recherchez ?
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 19 juil. 2007 à 15:53
En effet l'erreur venait (encore une fois) de moi
A force d'appeler ma servlet, une variable se réinitialisait mal (je ne comprends toujours pas pourquoi qu'au bout de la troisieme fois elle me fait ca), ce qui fait que ma requete GET etait mal formée au final, d'où le message d'erreur 10049...
Merci beaucoup ctx_man,
Bonne continuation!
Merci encore