Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Загрузка файла WinSock - ом

2.1K
02 марта 2005 года
pnvnik
40 / / 26.04.2004
Отправляю запрос серверу на получение файла http://www.airforce.ru/photogallery/gallery5/tu-160/tu-160_1.jpg
MsgBox показывает правильную строку запроса, а сервер возвращает ошибку, что послан запрос без имени хоста... Проясните, плиз, ситуацию.
Код:
Option Explicit

Dim fi As String, n As Long
Private Sub cmdStart_Click()
    n = 0
    Winsock1.RemoteHost = txtHost.Text
    Winsock1.RemotePort = 80
    Winsock1.Connect
    lblStatus.Caption = "Соединяемся с сервером ..."
End Sub

Private Sub Winsock1_Connect()
Dim strCommand As String
Dim strWebPage As String
    strWebPage = txtUrl.Text
    strCommand = "GET " & strWebPage & " HTTP/1.1" & vbCrLf
    strCommand = strCommand & "Accept: */*" & vbCrLf
    strCommand = strCommand & "Accept: text/html" & vbCrLf
    strCommand = strCommand & vbCrLf
    MsgBox "Посылаем команду: " & strCommand, vbOKOnly
    Winsock1.SendData strCommand
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim kl, i As Integer, strData As String
    Winsock1.GetData strData, vbString
    fi = fi & strData
    If n = 0 Then
        kl = InStr(1, fi, "HTTP/1.1 ", 0)
        If Mid(fi, kl + 8, 3) <> "200" Then
            lblStatus.Caption = "не удалось загрузить, ошибка ... " & Mid(fi, kl + 8, 3)
            MsgBox ("Не удалось загрузить, попробуйте еще раз")
            MsgBox ("Сервер сообщает " & Mid(fi, 1, 500))
            Unload Form1
            Exit Sub
        Else
            kl = InStr(1, fi, "Content-Length", 0) + 16
            If kl > 1 Then
                i = 1
                While Mid(fi, kl + i, 1) <> vbCrLf
                    i = i + 1
                Wend
                n = Val(Mid(fi, kl, i))
                kl = InStr(1, fi, vbCrLf & vbCrLf, 0) + 4
                fi = Mid(fi, kl)
            End If
        End If
    End If
    lblStatus.Caption = "Идет загрузка ... " & CStr(Len(fi)) & " из общей длины файла = " & CStr(n)
End Sub

Private Sub Winsock1_Close()
Dim kl As Integer, sdf As Double
    If Len(fi) = n Then
        On Error Resume Next
'        ChDir "d:\sergo"
'        If Err.Number = 76 Then
'            MkDir "c:\sergo"
'        End If
        Open txtDestinationFile.Text For Binary As #1
        Put #1, , fi
        Close #1
        MsgBox ("Сохранено в: " & txtDestinationFile.Text)
        lblStatus.Caption = "Успешно загружено ... " & CStr(n)
    Else
        lblStatus.Caption = "Связь с сервером прервана ... " & CStr(Len(fi)) & " из общей длины файла = " & CStr(n)
        'докачка? как сделать?
    End If
    Unload Form1
End Sub

Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
    MsgBox ("Не удалось загрузить, попробуйте еще раз")
    Unload Form1
End Sub

Private Sub cmdExit_Click()
    lblStatus.Caption = "не загружено ..."
    Unload Form1
End Sub
4.4K
03 марта 2005 года
blind rain
66 / / 20.07.2004
Да в общем, 200 возвращает, все OK.
Я цеплялся к локальному серверу Medusa на порту 8080.
txtHost="localhost"
txtURL="http:/localhost:8080/Public/Pic"

Только в обработчике DataArrival ошибки подправил:
If Mid(fi, kl + 9, 3) <> "200" Then
...
i As Long
...
While Mid(fi, kl + i, 2) <> vbCrLf 'vbCrLf -2 символа

и событие закрытия сокета не будет вызываться по окончанию приема данных.

А чем интернет трансфер контрол не понравился?
2.1K
03 марта 2005 года
pnvnik
40 / / 26.04.2004
Спасибо, Blind rain. Этот код сейчас посмотрю в действии. А по поводу Internet Transfer Control - посмотри, пожалуйста, тему " Как тестировать программу для работы в Internet?" http://forum.codenet.ru/showthread.php?s=&threadid=21796
2.1K
03 марта 2005 года
pnvnik
40 / / 26.04.2004
Где-то я все-таки пормахнулся:(. Программа выдает след ошибку: мол, непонятный мне запрос посылаете: host не указан! Хотя он явным образом должен браться из самого верхнего поля!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог