Vb6 如何知道winsock已完成接收文件?

Vb6 如何知道winsock已完成接收文件?,vb6,winsock,Vb6,Winsock,我正在使用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-webb

我正在使用
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
当标头不包含
内容长度时,如何知道控件已完成接收文件


我听说过一些方法,比如当
Winsock1.state
0
时,这意味着连接已关闭,但有时它仍处于其他状态,如
7
,因此我需要另一种解决方案。

您需要解析收到的HTTP头。解释它们如何告诉您数据的长度以及需要如何读取数据。

您需要解析接收到的HTTP头。解释它们如何告诉您数据的长度以及需要如何读取数据。

VB6中有许多组件可用于发出HTTP请求。有些是VB6自带的,有些是Windows的一部分。其中大多数都比使用Winsock控件在TCP之上滚动您自己的HTTP要好得多。标头处理只是它们可以帮助您完成的事情之一。

在VB6中,可以使用许多组件来发出HTTP请求。有些是VB6自带的,有些是Windows的一部分。其中大多数都比使用Winsock控件在TCP之上滚动您自己的HTTP要好得多。头处理只是它们可以帮助您的事情之一。

如果您仍然想使用自己的HTTP客户端,您应该阅读HTTP规范,而不是猜测


HTTP传输使用内容长度头来确定数据的长度。如果缺少标头,则连接关闭会发出数据结束的信号。

如果仍要滚动自己的HTTP客户端,则应阅读HTTP规范,而不是猜测

HTTP传输使用内容长度头来确定数据的长度。如果报头丢失,则连接关闭会发出数据结束的信号