我正在使用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
,所以我需要另一种解决方案。
答案 0 :(得分:2)
您需要解析收到的HTTP标头。 RFC 2616 Section 4.4解释了它们如何告诉您数据的长度以及如何读取数据。
答案 1 :(得分:1)
您可以在VB6中使用许多组件来发出HTTP请求。有些是VB6,有些是Windows的一部分。其中大多数都比使用Winsock控件在TCP上滚动自己的HTTP要好得多。标题处理只是他们可以帮助您的事情之一。
答案 2 :(得分:0)
如果您仍想要推送自己的HTTP客户端,则应阅读HTTP规范而不是猜测。
HTTP传输使用Content-Length标头来确定数据的长度。如果标头丢失,则数据结束将通过连接关闭发出信号。