Bonjour, j'ai un petit problème avec winsock que je n'arrive pas à résoudre.
Mon but est de récuppérer des pages internet en utilisant winsock en C/C++ sous Dev-C++. Mon problème est le suivant:
Lorsque je récupère ce que m'envoie le serveur http avec la fonction
recv, le nombre d'octet récupéré ce limite toujours à 1460 octets.
Evidament cela m'empèche de récupérer l'intégralité des pages html.
Voici le code source que j'utilise:
#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[8192];
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("192.168.0.6");
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/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;
}
Après quelque recherches, il semblerait que ce problème est du à la
limitation des trames ethernet à 1500 octet (simple supposition).
Si quelqu'un connait la solution de ce problème ou une manière de le contourner, j'aimerais vraiment qu'il m'en fasse part.