Скорость скачивания

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Мика
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.06.2003 (Вс) 10:27

Скорость скачивания

Сообщение Мика » 15.10.2003 (Ср) 10:09

Всем привет!

Я скачиваю файл функой

Private Declare Function URLDownloadToFile Lib "urlmon"
Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
Dim lngRetVal As Long
lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
If lngRetVal = 0 Then DownloadFile = True
End Function

1).Теперь как мне узнать с какой скоростью он у меня скачивается :?:
2).Когда я скачиваю файл из НЕТА то у меня форма зависает пока грузится файл. ЧЕ ДЕЛАТЬ ЧТОБЫ НЕ ЗАВИСАЛО :(

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 15.10.2003 (Ср) 10:32

эта функция предназначена для скачивания небольших файлов. например, скачать баннер или маленькую картинку с какогото сайта. лучше качай через винсок. правда потрудиться придётся, но зато всё нормально будет: и скорость скачивания, и зависать не будет. ну а если тебе приспичило качать через апи ф-цию, то в проге помимо главного экзешника создай что-то типа download.exe. в этой проге обрабатывай коандную строку (Command). Для того чтобы потом скачать файл, в своей главной программе вызови этот Download.exe с необходимыми параметрами командной строки. Например, это у тебя будет в коде проги Download.exe :

Private Sub Form_Load()
dim URL as string
URL = Command
DownloadFile URL, "куда скачать"
End
End Sub

А в главной проге будет так:

Private Sub cmdDownload_Click()
Shell App.path & "\download.exe " & txtURL.text , vbHide
End Sub

Тогда зависнет прога Download.exe , а главное окно твоей главной проги будет нормально. Для того, чтобы юзер понял, что файл скачался, в коде download.exe до начала скачивания создай какой нибудь файл, а после скачивания удали. А главная прога будет проверять существует ли файл. Если не существует, значит файл скачался. Можешь даже реестр использовать, и оставить какую нибудь метку. Например, файл скачался успешно или нет. Можешь сделать кнопку "Отмена". При клоике на неё вызывай TerminateProcess или какую нибудь другую ф-цию чтобы убить процесс Download.exe (Можно и SendMessage использовать, ведь тебе будет известно имя окна).
В принципе, можно сделать и скорость скачивания, но проблема в том, как узнать размер файла, который ты скачиваешь.

вот, попробуй этот пример:
www.v-adix.narod.ru/files2/multidownloader.zip
не помню как он качает, главное что качает. может поможет...

v-adix
Постоялец
Постоялец
 
Сообщения: 490
Зарегистрирован: 14.11.2002 (Чт) 15:11

Сообщение v-adix » 15.10.2003 (Ср) 10:39

совсем забыл. Скачай прогу flashget. начни качать какой нибудь файл и проследи за командами. в одной из них сервер возвращает размер файла. через винсок пошли эту команду серверу, и узнаешь размер файла.
и ещё. http 1.1 сам закрывает соединение после закачивания. так что можешь спокойно качать через винсок. там разбираться недолго, я думаю в яндексе ты найдёшь подробное описание всех команд.

Мика
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.06.2003 (Вс) 10:27

Сообщение Мика » 15.10.2003 (Ср) 10:50

Я в WinSock'е не му му я с ним не встричался и не работал.
Может кто подскажет как с поиощью него скачать файл и узнать скорость :?:

Мика
Обычный пользователь
Обычный пользователь
 
Сообщения: 58
Зарегистрирован: 08.06.2003 (Вс) 10:27

Сообщение Мика » 15.10.2003 (Ср) 14:23

Нет, этот пример, извини, ни хрена не качает.
Он скачивает файл предположем ZIP который в натуре весит 2MB а он скачивает 2KB, кароче фигня.
Так все таки через ВИНСОК можно качать файлы из НЕТА?
если да то КАК?

Dagobert
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 141
Зарегистрирован: 21.12.2002 (Сб) 6:48
Откуда: Russia

Сообщение Dagobert » 11.11.2003 (Вт) 11:15

Вот тебе качалка через Winsock.
Проверял на трёх адресах работает, надеюсь разберёшся.
Код: Выделить всё
Option Explicit

Private Sub Form_Click()
    Dim sAddress As String
    sAddress = InputBox("URL")
    With Winsock1
        'Для Proxy
        While .State <> sckClosed
            .Close
            Wend
       
        .Connect "192.168.1.1", 3128
        Do
            DoEvents
            Loop While .State <> sckConnected
        .SendData "GET " & sAddress
        .SendData vbCrLf
        .SendData "User-Agent: Mozilla/2.0 (Win95;I)"
        End With
    End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim F As Long, sData As String
F = FreeFile
Winsock1.GetData sData
Debug.Print sData
If Len(sData) = 0 Then Debug.Print "Donload....Ok"

End Sub


_Мика_
Гуру
Гуру
 
Сообщения: 1459
Зарегистрирован: 24.10.2003 (Пт) 15:05
Откуда: г. Москва, м.Речной вокзал

Сообщение _Мика_ » 11.11.2003 (Вт) 15:00

ОООО Спасибо огромное я то думал уже все :shock:
Правда еще не попробовал :)
-Папа, а правда, что форумы делают людей дибилами?
-гы гы гы, сынок, лол!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList  
cron