begin process at 2012 05 28 22:35:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

Connexion SOCKET_ERROR


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Connexion SOCKET_ERROR

jeudi 19 juillet 2007 à 10:55:18 | Connexion SOCKET_ERROR

fredsor

Membre Club
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);

    char cBuffligne[1024]="";
    char canal[200]="";
    char* retour = NULL;

   ...creation de ma requete GET...

    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!
jeudi 19 juillet 2007 à 15:00:13 | Re : Connexion SOCKET_ERROR

ctx_man

Réponse acceptée !
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.
jeudi 19 juillet 2007 à 15:10:39 | Re : Connexion SOCKET_ERROR

fredsor

Membre Club
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?
jeudi 19 juillet 2007 à 15:19:26 | Re : Connexion SOCKET_ERROR

fredsor

Membre Club
Euh erreur 10049...
Je suis mal barré?  ^^
Merci
jeudi 19 juillet 2007 à 15:33:42 | Re : Connexion SOCKET_ERROR

ctx_man

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."
jeudi 19 juillet 2007 à 15:53:54 | Re : Connexion SOCKET_ERROR

fredsor

Membre Club
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


Cette discussion est classée dans : text, socket, error, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

Socket en c avec winsock2.h [ par juju11288 ] Bonjour a tous je voudrai pour le moment arriver a faire un client serveur en c qui parle entre eux avec le protocole TCP/IP. Je fait les deux  progra socket envoie de text d'apres un fichier [ par hijakhakker ] salutj'utilise recement les socket et je teste une source qui utilise les socket pour envoyer hello world a qui se connect :#include #pragma comment(l Socket C et api [ par shadow1779 ] Bonjour,j'ai un petit prob avec un bot que j'essai de faire avec l'api et les sockets en C, pour l'instant on ne peux que cliquer sur le bouton connec probleme de communication entre deux programme [ par smook ] re salut le dernier message que j ai poster c etait pour les socket et la librairie "libwsock.a" mais sayer j ai passer cette etape j ai reussi a fair Socket Server/Client [ par XKaliBur ] Je suis débutant et je voudrais faire en sorte d'envoyer un message au mon serveur et des que ce dernier reçoit un message, il réponde en fonction de utilisation basique de winsock [ par Spiffou ] bonjour à tousj'essaie d'apprendre winsock en vc++ mode console pour le moment, et j'ai qlq difficultés...en gros j'etabli bien une connection entre l [C] Scanner de port utilise socket version linux [ par firemax ] Salut :) J'ai une erreur de segmentation et je n'est pas la moindre idée d'ou ca peut venir :( Je n'est aucun warning lors de la compilation mais l Socket en C [ par RM50Man ] WSADATA ws;                    WSAStartup(MAKEWORD(2,0), &ws);              &n socket et serveur smtp [ par lombredudragon ] Voila j'aimerais savoir si c'est possible d'envoyer un mail de cette maniere:#include #pragma comment(lib, "ws2_32.lib") void main(){ WSADATA WSADat


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales