Tcp vb6-状态=关闭时从winsocket获取数据

Tcp vb6-状态=关闭时从winsocket获取数据,tcp,vb6,winsock,Tcp,Vb6,Winsock,我正在Visual Basic 6中构建一个HTTP客户端,该客户端使用以下标题将数据发送到服务器: Connection: Close Wich强制web服务器在发送完所有数据后立即关闭连接。我有以下代码来接收数据: Private Sub rqt_DataArrival(Index As Integer, ByVal bytesTotal As Long) On Error GoTo errorHandler Dim buff As String If bytesTotal > 0

我正在Visual Basic 6中构建一个HTTP客户端,该客户端使用以下标题将数据发送到服务器:

Connection: Close
Wich强制web服务器在发送完所有数据后立即关闭连接。我有以下代码来接收数据:

Private Sub rqt_DataArrival(Index As Integer, ByVal bytesTotal As Long)
On Error GoTo errorHandler
Dim buff As String
If bytesTotal > 0 Then
    rqt(Index).GetData buff
    WSDataBuffer(Index) = WSDataBuffer(Index) & buff
End If

Exit Sub
errorHandler:
MsgBox "error in state: " & rqt(Index).State & ". Bytes left: " & bytesTotal
End Sub
问题是大约5次中有1次,我得到一个错误'40006': 请求的事务或请求的协议或连接状态错误。行中:

rqt(Index).GetData buff
所以我放置了那个错误处理程序来查看发生了什么,问题是.State=8(关闭状态)。但是仍然有数据需要接收,因为ByTestTotal是195


我做错了什么?

您是从客户端发送后关闭连接的吗?…还是服务器在接收后确实关闭了连接?服务器(apache)会在发送完所有内容后立即关闭连接,因为标头
connection:close
告诉他这一点(另一种选择是使用
连接:保持活动状态
,但我需要服务器关闭它。IIRC…一些HTTP服务器关闭连接的方式有点令人讨厌,只是使用
RST
中止而不是按照正确的
FIN
握手来强行中断连接。这可能与旨在击败某些拒绝服务攻击类型。我已将所有代码从visual basic 6翻译为visual studio C#,现在它工作正常。因此我猜这可能是visual basic 6的问题。或者您的VB6逻辑有错误。我想我们永远也不会知道。您是从客户端发送后关闭连接的吗?…还是服务器真的关闭了连接接收后关闭连接?服务器(apache)会在发送所有内容后立即关闭连接,因为标头
connection:close
告诉他这一点(另一种选择是使用
连接:保持活动状态
,但我需要服务器关闭它。IIRC…一些HTTP服务器关闭连接的方式有点令人讨厌,只是使用
RST
中止而不是按照正确的
FIN
握手来强行中断连接。这可能与旨在击败某些拒绝服务攻击类型。我已将所有代码从visual basic 6翻译为visual studio C#,现在它工作正常。因此我猜这可能是visual basic 6的问题。或者您的VB6逻辑有错误。我想我们永远也不会知道。