Pb de socket 'winsock2.h'

Signaler
Messages postés
17
Date d'inscription
jeudi 31 juillet 2003
Statut
Membre
Dernière intervention
17 juillet 2006
-
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
-
Bonjour tlm.

Je voudrais éxécuter l'adresse http://127.0.0.1/toto.php avec ce code :

#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sock = socket(AF_INET,SOCK_STREAM,0);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("\n\n -> CONNEXION OK");

send(sock,"GET toto.php HTTP/1.1\r\n",23,0);
printf("\n\n -> TRANSFERT OK");

closesocket(sock);
WSACleanup();
}

La compilation est OK.
Mais le fichier toto.php n'est pas éxécuté :( (Il devrait créer un fichier essai.txt)

Pouvez vous m'aidez ? Merci d'avance.

7 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Affiches la réponse du serveur pour savoir ce qui va pas.
Messages postés
17
Date d'inscription
jeudi 31 juillet 2003
Statut
Membre
Dernière intervention
17 juillet 2006

Merci pour ta réponse, mais je ne sais pas faire cela ;(
Le serveur est EasyPhp. Comment faire ? Merci
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Je veux dire, tu affiches la reponse du serveur au niveau du client.

Apres le send(...) de ta requete:
char buf[1024];
recv(sock,buf, sizeof(buf),0);

et tu affiches tout ce que tu recois.
Messages postés
17
Date d'inscription
jeudi 31 juillet 2003
Statut
Membre
Dernière intervention
17 juillet 2006

Mon nouveau code est donc :
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

void main()
{
char buf[1024];
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
sock = socket(AF_INET,SOCK_STREAM,0);
connect(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("\n\n -> CONNEXION OK");
send(sock,"GET toto.php HTTP/1.1\r\n",23,0);
recv(sock,buf, sizeof(buf),0);
printf(buf);
printf("\n\n -> TRANSFERT OK");
closesocket(sock);
WSACleanup();
}

Et la ... Ca reste bloqué sur CONNEXION OK, puis plus rien.

Tu n'aurais pas un exemple de code simple & proche de celui ci qui permettrait par exemple de récupérer le source de n'importe quel URL ?

Car en fait, non seulement mon code ne fonctionne pas, mais en plus, je n'ai pas bcp de connaissances ds le domaine pour parvenir à trouver le pb ;(
D'ou ma présence ici. Merci d'avance.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Voila un exemple de requete http simple.
Changer la requete du send(...) ainsi que le nom du serveur dans gethostbyname(...).

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")

SOCKET s;
in_addr addr;
sockaddr_in sin;
hostent * host;
WSADATA wsa;
char buf[1024];
int octet = 0;

int main(void)
{
WSAStartup(0x0202, &wsa);

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(s == SOCKET_ERROR){
printf("socket : %d\n", WSAGetLastError());
}

host = gethostbyname("www.facultyof1000.com");

memcpy(&addr, host->h_addr, host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(80); // HTTP
sin.sin_addr = addr;

if(SOCKET_ERROR == connect(s,(sockaddr*)&sin, sizeof(sin))){
printf("connect : %d\n", WSAGetLastError());
}

strcpy(buf, "GET http://www.facultyof1000.com/whatsmyip.asp HTTP/1.0\n\n"); // la requete http
send(s, buf, strlen(buf), 0);

octet = recv(s, buf, sizeof(buf), 0);

for(int i=0; i<octet; i++)
printf("%c", buf[i]);

closesocket(s);
WSACleanup();
return 0;
}
Messages postés
17
Date d'inscription
jeudi 31 juillet 2003
Statut
Membre
Dernière intervention
17 juillet 2006

Yo !!!!

Je n'ai pas encore tout compris, mais en tout cas, une chose est sure : ton prog marche très bien, & pour mon appli aussi.

Je vais bien dormir cette nuit :) :)

Merci encore.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
J'avais fait ca pour une demande sur ce forum.
Je pense que cela vient de ta requete, car coté code ca a l'air bon.
Il faut passer l'url complete dans ta requete il me semble, non ?