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

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

10.03.2009, 03:12. Показов 5612. Ответов 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
11554 / 4349 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
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
11554 / 4349 / 452
Регистрация: 12.06.2008
Сообщений: 12,453
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru