fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
8 nov. 2007 à 09:11
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008
-
8 nov. 2007 à 10:14
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;
}
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.
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;
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.
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...
fredsor
Messages postés198Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 3 avril 2008 8 nov. 2007 à 10:14
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! ^^