Как узнать, что winsock завершил прием файла? - PullRequest
0 голосов
/ 24 декабря 2011

Я использую Winsock элемент управления:

Private Sub Form_Load()
  Winsock1.Connect "stackoverflow.com", 80
End Sub

Private Sub Winsock1_Close()
  Winsock1.Close
End Sub

Private Sub Winsock1_Connect()
  Winsock1.SendData "GET /questions/8624871/vb6-alternative-to-inet-webbrowser-control HTTP/1.1" & vbCrLf & "Host: stackoverflow.com" & vbCrLf & vbCrLf
End Sub

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim s As String

  Winsock1.GetData s, vbString
  RichTextBox1.Text = RichTextBox1.Text & s
End Sub

Как узнать, что элемент управления завершил получение файла, когда заголовок не содержит Content-Length?

Я слышал о некоторых способах, например, когда Winsock1.state равен 0, это означает, что соединение закрыто, но иногда оно остается в каком-то другом состоянии, например 7, поэтому мне нужно другое решение.

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

Вам необходимо проанализировать полученные заголовки HTTP. RFC 2616 Раздел 4.4 объясняет, как они сообщают вам длину данных и как данные должны быть прочитаны.

1 голос
/ 26 декабря 2011

Существует ряд компонентов, которые вы можете использовать в VB6 для выполнения HTTP-запросов.Некоторые поставляются с VB6, некоторые сейчас являются частью Windows.Большинство из них намного лучше, чем использование собственного HTTP поверх TCP с помощью элемента управления Winsock.Обработка заголовка - лишь одна из вещей, в которой они могут вам помочь.

0 голосов
/ 27 декабря 2011

Если вы все еще хотите использовать свой собственный HTTP-клиент, вам следует прочитать спецификации HTTP, а не гадать.

Передачи HTTP используют заголовок Content-Length для определения длины данных. Если заголовок отсутствует, то конец данных сигнализируется закрытием соединения.

...