使用Visual Basic 6.0,我正在與Web服務器進行Winsock HTTP連接,該連接發送數據並在之後立即關閉。 (連接:保持活躍,沒有做任何好與此服務器)從套接字關閉後從套接字讀取數據
這裏有一塊我的代碼:
sck.SendData "GET /? HTTP/1.1" & vbNewLine & _
"Host: example.org" & vbNewLine & _
"Connection: keep-alive" & vbNewLine & vbNewLine
'// Wait for full Data:
Dim DATA As String
While (Not isEOF(DATA)) And sck.State = sckConnected
If sck.State = sckConnected Then sck.PeekData DATA
Sleep 10: DoEvents
Wend
If sck.State <> sckConnected Then
'// When this Fires, my data is missing the 25% of it's rest.
'// It is received corectly acording to Wireshark, but Winsock
'// closes the socket befor I can get the rest to the DATA variable.
MsgBox "This happends randomly 10% of the times.", vbInformation
End If
Clipboard.Clear
Clipboard.SetText DATA
Msgbox DATA
sck.Close
的isEOF()函數做一些檢查的東西,看看數據是否充分並準備就緒(閱讀內容長度,</html>標記或空字符)。 不需要在這裏發佈,因爲它很大,這不是問題,相信我。
當您使用:sck.GetData
或sck.PeekData
來關閉套接字時,會出現錯誤。那麼我怎樣在封閉後從套接字中獲取數據呢?
這裏的關鍵是,10%的時間,Winsock關閉套接字befor我可以得到其餘的數據。 我嘗試了一切來解決這個問題(使用事件處理程序,GetData而不是PeekData等),但我仍然隨機獲取與要連接的Web服務器相同的錯誤。
什麼是正確的方式使用Winsock corectly GET和等待數據? 我在這段代碼中做了什麼錯誤?
解釋歐比旺:「使用事件,盧克!這不是你正在尋找的QBasic。」 – Bob77