begin process at 2012 05 30 05:36:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Autre

 > 

Probleme Winsock


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

Probleme Winsock

jeudi 8 novembre 2007 à 09:11:08 | Probleme Winsock

fredsor

Membre Club
Salut a vous,
Je suis toujours en train de passer une appli de embedded visual c++ (donc pour Windows CE => Pocket Pc) vers DevC++ (windows "normal", appli windows).
Tous les fonctionnements semblent similaires, cependant j'ai un probleme au niveau de mes requetes HTTP envoyées vers un serveur.

Pour mon premier écran, j'emets une requete GET : j'arrive a afficher ce premier ecran sur les deux appli
Pour les ecrans suivants, j'envoi egalement des données, je fais donc une requete POST : or avec evc++, pas de souci les ecrans s'enchainent, mais avec DEVC++, paf erreur 400 Mauvaise requete!!
Voici un bout de code pour etre plus explicite :
    WSADATA WSAData;
    int iResult = WSAStartup(MAKEWORD(2,0), &WSAData);
    if (iResult != NO_ERROR){
        WSACleanup();
        return NULL;
    }

    SOCKET sock;
    SOCKADDR_IN sin;

    sock = socket(AF_INET, SOCK_STREAM, 0);                    // on verifie la validite de la socket
    if (sock == INVALID_SOCKET) {
        WSACleanup();
        return NULL;
    }

    char cBuffligne[3000]="";
    char canal[2000]="";
    char* retour = NULL;

    strcpy(canal,"GET ");                                    // creation de la requete HTTP, methode GET
    strcat(canal, cheminFichierIni);                            // chemin du fichier, genre "/ecran.txt"
    strcat(canal," HTTP/1.1\r\nHost: ");                    // type HTTP, suivi de l'adresse Host
    strcat(canal,adresseIpFichierIni);                        // adresse IP
    strcat(canal,"\r\n\r\n");                                // deux retour chariot

    memset(&sin, 0, sizeof(sin));
    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) {
        WSACleanup();
        return NULL;
    }

    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(); => METHODE GET, pas de probleme surt les deux applis
-------------------------------------------------------
    char canal[2000]="";                                           
    WSADATA WSAData;
    int iResult = WSAStartup(MAKEWORD(2,0), &WSAData);
    if (iResult != NO_ERROR){...    }
    SOCKET sock;
    SOCKADDR_IN sin;

    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET) { ...    }

    TCHAR chaineLength[10];
    swprintf(chaineLength,TEXT("%d"),strlen(chainePostee));        // recuperation de la longueur de la chaine a renvoyer
    strcpy(canal,"POST ");                                        // methode employee
    strcat(canal,cheminFichierIni);
    strcat(canal,"?");
    strcat(canal," HTTP/1.1\r\nHost: ");                        // chemin de la servlet
    strcat(canal,adresseIpFichierIni);    // adresse du serveur   
    strcat(canal,"\r\nConnection: Close\r\nContent-Type: application/x-www-form-urlencoded\r\nContent-Length: ");
    strcat(canal, ConvertUnicodeToAnsi(chaineLength));            // longueur chaine renvoyee (content-length)
    strcat(canal,"\r\n\r\n");                                    // deux retours chariots
    strcat(canal,chainePostee);                                    // la chaine a renvoyer
    strcat(canal,"\r\n\r\n");                                    // et encore deux retours chariot

    sin.sin_addr.s_addr = inet_addr(adresseIpFichierIni);        // serveur auquel on envoie la requete
    sin.sin_family = AF_INET;
    sin.sin_port = htons(atoi(portFichierIni));                    // port HTTP.

    if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) == SOCKET_ERROR){ ...}

    send(sock, canal, strlen(canal), 0);                    // on envoie la requête HTTP.
    char cBuffligne[3000]="";
    recv(sock, cBuffligne, sizeof(cBuffligne), 0);    // reception des donnees dans le buffer

    closesocket(sock);                                        // on ferme le socket.
    WSACleanup(); => METHODE POST : Mauvaise requete pour la version Windows "normal"
Voila, si quelqu'un a une idée, je lui en suis tres reconnaissant, car la mon appli ne peut pas tourner...
jeudi 8 novembre 2007 à 10:14:08 | Re : Probleme Winsock

fredsor

Membre Club
Réponse acceptée !
Youpiiiiii!!
En cherchant bien, j'ai trouvé l'erreur!!!
Pour le POST, je suis obligé de fournir la longueur de la chaine renvoyé. Or pour passer le int en chaine de caracteres, la fonction est swprintf sous evc++, alors qu'en C c'est sprintf simplement...

Le bonheur, ca passe maintenant. Je crois ke je vais aller tous les verifier. Dommage que le compilateur ne m'a pas jeté dès la compilation, comme il me lavait fait pour les _ftprintf et compagnie...
Merci a vous quand meme, j'espere que ca pourra aider quelqu'un! ^^




Cette discussion est classée dans : socket, canal, sin, strcat, sock


Répondre à ce message

Sujets en rapport avec ce message

Rhaaaa Requete Post http [ par fredsor ] Salut a tous, Desolé pour ce cri primaire, mais je comprends pas pourquoi ca ne marche pas...Voici ma la requete que je send : char canal[200];WSADATA socket trop lents [ par cid7777777 ] bonjour,jessaye de faire un jeu qui peu se jouera 2 en reseau local.je ne connais absolument rien en reso, mais en fouillant sur le net,  jai trouver Connexion SOCKET_ERROR [ par fredsor ] 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 n Problème de connexion Socket [ par qhhu ] Bonjour !En temp normal, je programme en java, mais j'ai voulu essayer le c++parce que je trouve que c'est interessant de connaître plusieurs language Bind echouant.. [ par lektrosonic ] Bonsoir, deux applications, bon pour etre original: serveur et client.Chacune de leur cote effectue ce code:Serveur:----------------------   if(WSASta RECV() TELNET [ par kiki67100 ] Bonjour j'ai fait un serveur en c++ Mais le probleme c'est que mon code lit le recv() de telnet caractere par caractere et moi je voudrais phrase par 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 WSAAsyncSelect [ par lektrosonic ] Bonsoir,Je code un serveur, voici la partir du code relative aux sockets:---------------------------------------------------------------if(WSAStartup( probleme boucles mutliple avec les sockets [ par miki42 ] Bonjour a tous voila j'ai pa le choix,deja une semaine que je mord la langue pour trouver dou vient mon probleme mais rien y fait suit obliger de fari


Nos sponsors


Sondage...

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,515 sec (4)

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