Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/28: Рейтинг темы: голосов - 28, средняя оценка - 4.93
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335

Как с помощью сокета скачать файл?

10.03.2009, 03:12. Показов 5662. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
допустим есть файл http://mysite.com/youfil.dat Вот я хочу узнать как с помощью сокета скачать фалй ? И реально ли это ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2009, 03:12
Ответы с готовыми решениями:

Как скачать файл с помощью webBrowser сразу на HDD?
Как скачать файл перейдя по ссылке с помощью "webBrowser" сразу на HDD без открытия браузера и его загрузчика?

Как с помощью IEDownload скачать файл с Яндекс.Диск
Привет. Скачал и установил компонент IEDownload. Теперь хочу спросить кое-что: Как с помощью этого компонента скачать файл с Яндекс.Диск?...

Как слушать определенный порт с помощью сокета
Создал сокет на прием всех всех IP кадров, которые приходят на порт 1501 с любого IP адреса. Socket receiveSocket = new...

9
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
10.03.2009, 10:20
Одним сокетом не обойдешься. Еще нужно будет поддержать протокол передачи - HTTP или FTP.
1. Создаешь сокет.
2. Коннектишься к нужному тебе серверу.
3. Посылаешь ему запрос нужного тебе файла, или, скорее, части файла.
4. Читаешь ответ.
5. Пока файл получен не весь, повторяешь пп.3 и 4.
6. Отсоединяешься от сервера.
7. Закрываешь сокет.
Обработка ошибок - по ходу дела.
Литература: У.Р.Стивенс, UNIX Разработка сетевых приложений, и еще Й.Снейдер, Эффективное программирование TCP/IP. - обе книги есть в электронном виде в Сети, Гугл в помощь.
В Win все программируется точно так же.
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
11.03.2009, 02:34  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 buffer[0..200] array of stintg;
 
addr.sin_family:= AF_INET;
    addr.sin_port:= htons (80);
    addr.sin_addr.s_addr :=  adress;
 
    if (connect(s,addr,sizeof(addr))=SOCKET_ERROR) then
    
        errormessage();
    
 
   
    sprintf (buffer,'GET somefile.exe'#13#10'Host: somehost'#13#10#13#10');
    send (s, buffer, sizeof(buffer), 0);
типа вот так или както по другому

Добавлено через 8 минут 37 секунд
Что надо вставлять в send () точнее что буфере должно быть. Какой текст ?
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
11.03.2009, 10:28
Дык, а RFC почитать? Читай RFC 959 или RFC 2616.
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
12.03.2009, 02:19  [ТС]
Delphi
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
var
 Site : PChar;
 sock : TSocket;
 HostEnt : PHostEnt;
 WSA : TWSAData;
 addr : sockaddr_in;
 tos : String;
 hf:dword;
 i:integer;
 buf:array[0..255] of char;
 sendbuffer:array[1..1024] of char;
begin
 if WSAStartup($0101, WSA) <> 0 then
  Exit;
 sock := Socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 FillChar(addr, SizeOf(sockaddr_in), 0);
 addr.sin_family := AF_INET;
 addr.sin_port := htons(80);
 Site := 'www.mysite.ru';
 try
 HostEnt := gethostbyname(Site);
 addr.sin_addr.s_addr := Longint(PLongint(HostEnt^.h_addr_list^)^); // вот тут ошибка в чем прикол ?
 except
  messagebox(0,'Fuck','',0);
 end;
 if  Connect(sock, addr, SizeOf(addr)) = SOCKET_ERROR then
 messagebox(0,'Fuck','',0);
 
       
          FillChar(sendbuffer, sizeof(sendbuffer),0);
 strcopy(@sendbuffer, 'GET [url]http://mysite.ru/pth10.rar[/url] HTTP/1.0');
 strcat(@sendbuffer, #13#10'Host: mysite.ru');
 strcat(@sendbuffer, #13#10'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)');
 strcat(@sendbuffer, #13#10'Accept: */*');
 strcat(@sendbuffer, #13#10'Range: bytes=0-');
 strcat(@sendbuffer, #13#10#13#10);
 
      tos:= 'logo.png';
 send(sock,sendbuffer,Length(sendbuffer), 0);
 hf:=_lopen(PChar(tos),OF_CREATE+OF_WRITE );       { TODO 1 -o8 -c66 : read }
 if hf = HFILE_ERROR   then
  hf:=_lcreat(PChar(tos),0);
 
 Sleep(2000);
repeat
 i := recv(sock, buf, sizeof(buf), 0);
 _lwrite(hf,@buf,i);
 UNTIL
i <= 0;
  _lclose(hf) ;
       CloseSocket(sock);
    WSACleanup();
 
end.
вот приблизительный рабочий код
1.но с ошибками если способ получить ip адресс сайта не используя gethostbyname
2.когда я скачиваю любой файл то в начеле файла подобный текст
Code
1
2
3
4
5
6
7
8
9
10
11
HTTP/1.0 206 Partial Content
Date: Wed, 11 Mar 2009 23:08:06 GMT
Server: ZX_Spectrum/1997 (Sinclair_BASIC)
Set-Cookie: nuid=1308213651236812886; path=/; expires=Sat, 09-Mar-19 23:08:06 GMT; domain=.narod.ru
Last-Modified: Sat, 07 Mar 2009 00:22:48 GMT
ETag: "5e29ea-ccf-49b1be58"
Accept-Ranges: bytes
Content-Length: 1779
Content-Range: bytes 1500-3278/3279
Connection: close
Content-Type: application/octet-stream
как избавить от него ?
а после данные скачиваемого файла %)
0
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
12.03.2009, 10:02
Тьфу, но ведь я написал про RFC! Зачем?
В начале сообщения идет его заголовок, и его структура и как он отделяется от тела сообщения - все описано в RFC.
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
12.03.2009, 10:03
Цитата Сообщение от Crazyman
как избавить от него ?
Никак. Так и должно быть. Просто удаляй всё до пустой строки. В заголовке некоторые строки могут оказаться полезными. Например, Content-Length указывает, сколько байт нужно получить.
0
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
17.03.2009, 01:29  [ТС]
Ну допустим при первом запросе выдаеться данный заголовок, потом идет сайм файл. Так ? или в процессе скачки файла может вылететь еще один заголовок ?

Добавлено через 1 час 10 минут 38 секунд
как я понял В rfc написано что когда отправляешь запрос GET то в ответ приходит заголовок HEADER. и как я понял больше ничего не должно приходить !
0
Почетный модератор
 Аватар для Humanoid
11559 / 4353 / 453
Регистрация: 12.06.2008
Сообщений: 12,455
17.03.2009, 09:37
Цитата Сообщение от Crazyman
Ну допустим при первом запросе выдаеться данный заголовок, потом идет сайм файл. Так ?
Да
Цитата Сообщение от Crazyman
или в процессе скачки файла может вылететь еще один заголовок ?
Нет. Только если ты отправишь новый запрос GET или POST
Цитата Сообщение от Crazyman
как я понял В rfc написано что когда отправляешь запрос GET то в ответ приходит заголовок HEADER. и как я понял больше ничего не должно приходить !
На запрос GET приходит заголовок, а после пустой строки сам файл. Это на запрос HEAD приходит только заголовок без файла.
1
17 / 14 / 3
Регистрация: 16.09.2008
Сообщений: 335
19.03.2009, 01:49  [ТС]
Ктонить знает как отделить HEADTER от фала . я знаю как найти точку начала файла , но мне не как не удаеться передать правильно буфер. я пробовал и через move и copymemory ничего не помогает !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2009, 01:49
Помогаю со студенческими работами здесь

Скачать файл с помощью WinSock через FTP
Надо скачать файл с помощью WinSock через FTP и при этом авторизоваться. Подключение и авторизация без проблемм а с перекачкой файла не...

Как бороться с повышением пинга при подключении к компьютеру с помощью сокета?
Есть клиент-серверная модель сети написанная для игры. Обработка сокетов осуществляется с помощью асинхронных функций. Соль вся в том, что...

Как с помощью VB скачать GIF, JPG ?
Kto podskazet kak mozno s pomosju VB skacat GIF, JPG iz seti. Na masinu

PHP - как открыть/прочитать файл из сокета через прокси сервер
не знаю правильно ли я выразился..., я имел ввиду как прочитать в переменную какой-либо файл с какого-нибудь сервера через прокси-сервер.

Подскажите, как с помощью java скачать данные с COM2 порта??
Подскажите, как с помощью java скачать данные с COM2 порта??


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru