2011-12-24 52 views
0

我使用的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-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.state0这意味着连接被关闭,但有时它仍然在其他一些国家,像7,所以我需要另一种解决方案等。

回答

0

如果你仍然想要推出自己的HTTP客户端,你应该阅读HTTP规范而不是猜测。

HTTP传输使用Content-Length头来确定数据的长度。如果标题丢失,则数据结束由连接关闭发出信号。

2

您需要解析收到的HTTP标头。 RFC 2616 Section 4.4解释了他们如何告诉你数据的长度以及如何读取数据。

1

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