2011-12-24 65 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好得多。頭部處理只是他們可以幫助你的其中一件事。

相關問題