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
Загрузка файла WinSock - ом
http://www.airforce.ru/photogallery/gallery5/tu-160/tu-160_1.jpg
MsgBox показывает правильную строку запроса, а сервер возвращает ошибку, что послан запрос без имени хоста... Проясните, плиз, ситуацию.
Отправляю запрос серверу на получение файла
MsgBox показывает правильную строку запроса, а сервер возвращает ошибку, что послан запрос без имени хоста... Проясните, плиз, ситуацию.
Код:
Я цеплялся к локальному серверу 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 символа
и событие закрытия сокета не будет вызываться по окончанию приема данных.
А чем интернет трансфер контрол не понравился?
Спасибо, Blind rain. Этот код сейчас посмотрю в действии. А по поводу Internet Transfer Control - посмотри, пожалуйста, тему " Как тестировать программу для работы в Internet?"
Где-то я все-таки пормахнулся:(. Программа выдает след ошибку: мол, непонятный мне запрос посылаете: host не указан! Хотя он явным образом должен браться из самого верхнего поля!