Здравствуйте!
Может кто сталкивался со следующей проблемой:
Нужно скачать файл с Web-сервера используя winsoock. С реализацией всё вроде понятно, заносим в массив параметры HTTP протокола. Отправляем на сервер, и ждём получения ответа. Затем парсим тело ответа на наличие файла, заносим его в массив, и пытаемся записать в файл. Вроде в ответе содержиться массив действующего файла, а записывается какая-то чушь. Как записать правильно файл?
Может кто сталкивался со следующей проблемой:
Нужно скачать файл с Web-сервера используя winsoock. С реализацией всё вроде понятно, заносим в массив параметры HTTP протокола. Отправляем на сервер, и ждём получения ответа. Затем парсим тело ответа на наличие файла, заносим его в массив, и пытаемся записать в файл. Вроде в ответе содержиться массив действующего файла, а записывается какая-то чушь. Как записать правильно файл?
Код |
---|
int file_download(void) // ф-ия скачки файла { char sendbuffer[1024], recvbuffer[65535]; strcpy(sendbuffer, "GET "); strcat(sendbuffer, "http://test1.ru/1.gif"); strcat(sendbuffer, " HTTP/1.0\r\nHost: "); strcat(sendbuffer, "test1.ru"); strcat(sendbuffer, "\r\n\r\n"); memset(recvbuffer,0,sizeof(recvbuffer)-1); MessageBox(0,sendbuffer,"Send Buffer",0); SOCKET s = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN webaddr; webaddr.sin_addr.S_un.S_addr = resolve("test1.ru"); webaddr.sin_family = AF_INET; webaddr.sin_port = htons(80); if(connect(s, (struct sockaddr *)&webaddr,sizeof(SOCKADDR_IN))) return -1; send(s, sendbuffer, strlen(sendbuffer),0); Sleep(2000); int i; while(i = recv(s,recvbuffer+strlen(recvbuffer),1,0)) // получаем ответ {if (i == SOCKET_ERROR) return -1;} MessageBox(0,recvbuffer,"Answer of Web Server",0); // parsing... char *temp; for(int i = 0; recvbuffer[i]!=0; ++i) { if((recvbuffer[i]=='\r')&&(recvbuffer[i+1]=='\n')&& (recvbuffer[i+2]=='\r')&&(recvbuffer[i+3]=='\n')) {temp = (char*)&recvbuffer[i]+4; break;} } MessageBox(0,temp,"Answer of Web Server",0); FILE *stream= fopen("1.gif", "wb"); //fprintf(stream, temp); fwrite(&temp, sizaof(temp), 1, stream); fclose(stream); return 0; } |
Изменено: flintstone - 20.12.2008 09:45:26