使用 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 会在我获得其余数据之前关闭套接字。我尝试了一切来解决这个问题(使用事件处理程序、GetData 而不是 PeekData 等),但我仍然随机收到与我正在连接的网络服务器相同的错误。
使用 Winsock 正确获取并等待数据的正确方法是什么?我在这段代码中做错了什么?