Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.16 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <winsock2.h>
  5. int main(int argc, char* argv[])
  6. {
  7.     // Ellenőrzés
  8.     if (argc < 5)
  9.     {
  10.         printf("Használat: %s IP port oldal fájl\n", argv[0]);
  11.         return 1;
  12.     }
  13.     // Winsock inicializálás
  14.     WSADATA wsd;
  15.     if (WSAStartup(0x0202, &wsd) != 0)
  16.     {
  17.         printf("WSAStartup: %d", WSAGetLastError());
  18.         return 1;
  19.     }
  20.     // socket létrehozása
  21.     SOCKET sock;
  22.     if ((sock = socket(PF_INET, SOCK_STREAM, 0)) < 0)
  23.     {
  24.         printf("socket error: %d\r\n", WSAGetLastError());
  25.         return 1;
  26.     }
  27.     // Szerver címének összeállítása
  28.     struct sockaddr_in addr;
  29.     addr.sin_family = AF_INET;
  30.     addr.sin_addr.s_addr = inet_addr(argv[1]);
  31.     addr.sin_port = htons(atoi(argv[2]));
  32.  
  33.     //kapcsolódás a szerverhez
  34.     if (connect(sock, (struct sockaddr*)&addr, sizeof(addr)) < 0)
  35.     {
  36.         printf("connect error: %d\r\n", WSAGetLastError());
  37.         return 1;
  38.     }
  39.     //HTTP kérés küldése a szervernek
  40.     char request[256];
  41.     int reqlen;
  42.     reqlen = sprintf(request, "GET %s HTTP/1.0\r\n\r\n", argv[3]);
  43.     send(sock, request, reqlen, 0);
  44.  
  45.     //válasz fogadása
  46.     char received[1024];
  47.     int recvlen;
  48.     recvlen = recv(sock, received, sizeof(received) - 1, MSG_WAITALL);
  49.     received[recvlen] = '\0';
  50.     if (recvlen < 0)
  51.     {
  52.         printf("receive error: %d\r\n", WSAGetLastError());
  53.         return 1;
  54.     }
  55.    
  56.     printf("A szerver válasza: %s\r\n", received);
  57.     //szerver válaszának feldolgozása
  58.     char version[16];
  59.     int status;
  60.     char error[256];
  61.     if (sscanf(received, "HTTP/%16s %d %256[^\r\n]\r\n", version, &status, error) == 3)
  62.     {
  63.         printf("A szerver státusz jelzése: %d %s\n", status, error);
  64.  
  65.     }
  66.     // megkeressük a fejléc végét
  67.     char* pdata;
  68.     if ((pdata=strstr(received, "\r\n\r\n"))==NULL)
  69.     {
  70.         printf("Hiba");
  71.         return 1;
  72.     }
  73.     // fájl megnyitása
  74.     FILE* f;
  75.     f = fopen(argv[4], "w");
  76.     if (f == NULL)
  77.     {
  78.         perror("fopen");
  79.         return 1;
  80.     }
  81.     //adat fájlba írása
  82.     fwrite(pdata + 4, 1, recvlen - (pdata - received) - 4, f);
  83.     //további adatok fogadása
  84.     while ((recvlen=recv(sock, received, sizeof(received),0))>0)
  85.     {
  86.         fwrite(received, 1, recvlen, f);
  87.  
  88.     }
  89.     fclose(f);
  90.  
  91.  
  92.     //cleanup
  93.     closesocket(sock);
  94.  
  95.  
  96.  
  97.     WSACleanup();
  98.     return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement