1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <winsock2.h>
#include <stdio.h>
#pragma comment (lib,"ws2_32.lib")
int connection (char* serveur, int port)
{
int sock;
struct sockaddr_in serverSockAddr;
struct hostent *serverHostEnt;
memset (&serverSockAddr, 0, sizeof (serverSockAddr));
serverHostEnt = gethostbyname (serveur);
if (serverHostEnt == NULL)
{
printf ("Serveur introuvable : %s\n", serveur);
return -1;
}
memcpy (&serverSockAddr.sin_addr, serverHostEnt -> h_addr, serverHostEnt -> h_length);
serverSockAddr.sin_port = htons (port);
serverSockAddr.sin_family = AF_INET;
if ((sock = socket (AF_INET,SOCK_STREAM, 0)) < 0)
{
printf ("Probleme lors de la creation du socket ...\n");
return -1;
}
if (connect (sock, (struct sockaddr *) &serverSockAddr, sizeof (serverSockAddr)) < 0)
{
printf ("Impossible de se connecter\n");
return -1;
}
return sock;
}
void download (int sock, char* hote, char* chemin, char* nom)
{
char commande [500], buf [1024];
int lu = 1;
FILE* fichier = fopen (nom, "wb");
sprintf (commande, "GET %s%s HTTP/1.1\r\nHost: %s\r\nAccept: */*\r\n\r\n", chemin, nom, hote);
send (sock, commande, strlen (commande) + 1, 0);
while (lu > 0)
{
lu = recv (sock, &(buf [0]), 1024, 0);
fwrite (&(buf [0]), lu, 1, fichier);
}
fclose (fichier);
}
int main (void)
{
WSADATA wsa;
WSAStartup (MAKEWORD (2, 0), &wsa);
int sock = -1, port = 80;
char serveur [] = "char serveur";
char hote[] = "char hote";
char chemin [] = "/";
char fichier [] = "index.html";
sock = connection (serveur, port);
if (sock < 0) return -1;
download (sock, hote, chemin, fichier);
shutdown (sock, 2);
closesocket (sock);
WSACleanup ();
return 0;
} |
Partager