VB6 winsock等待响应

VB6 winsock等待响应,vb6,winsock,Vb6,Winsock,我正在使用vb6中的winsock控件检查web服务的可用性。 我执行post请求,获取响应并解析响应头以检查响应代码 响应以多个数据包的形式到达 ' this event occurs when data is arriving via winsock Private Sub wsTCP_DataArrival(ByVal bytesTotal As Long) Dim strResponse As String wsTCP.GetData strRespons

我正在使用vb6中的winsock控件检查web服务的可用性。 我执行post请求,获取响应并解析响应头以检查响应代码

响应以多个数据包的形式到达

' this event occurs when data is arriving via winsock
Private Sub wsTCP_DataArrival(ByVal bytesTotal As Long)
    Dim strResponse As String        
    wsTCP.GetData strResponse, vbString, bytesTotal
    strResponse = FormatLineEndings(strResponse)

    ' we append this to the response box becuase data arrives
    ' in multiple packets
    response = response & strResponse        
End Sub
我的问题是,我需要等到检查响应代码后才能继续执行

有没有办法不用定时器就可以做到这一点

谢谢, 亚历克斯


最终决定使用计时器。

在发送请求后,禁用用户界面中的控件,但取消按钮或其他控件除外。响应完成后,您可以启用UI并在DataArrival中显示结果,否则“继续”

你真的不想在VB6程序中阻塞套接字,它们会破坏整个Windows编程模式,因为你没有可用的工作线程。即使使用工作线程,您最终也会以相同的方式编写代码来“挂起”UI线程,因此不会有任何损失


计时器可能是处理请求超时的最简单方法。

在发送请求时,禁用UI中的控件,但“取消”按钮或其他控件除外。响应完成后,您可以启用UI并在DataArrival中显示结果,否则“继续”

你真的不想在VB6程序中阻塞套接字,它们会破坏整个Windows编程模式,因为你没有可用的工作线程。即使使用工作线程,您最终也会以相同的方式编写代码来“挂起”UI线程,因此不会有任何损失


计时器可能是处理请求超时的最简单方法。

每次接收数据时,将其附加到缓冲区,然后对其进行处理/解析。 它绕过了必须使用阻塞套接字的问题,意味着当它到达时,您可以做出反应。
有关示例,请参见网络协议。

每次接收数据时,将其附加到缓冲区,然后对其进行处理/解析。 它绕过了必须使用阻塞套接字的问题,意味着当它到达时,您可以做出反应。
有关示例,请参见网络协议。

请注意
response=response&strResponse
对性能来说不是很好,因为它疯狂地重新分配字符串。如果预期性能和/或响应较大,则更好的方法是分配一个大缓冲区,该缓冲区不需要在每次数据到达时调整大小,并将数据帧以正确的偏移量插入其中。+1好的建议。。。我使用strResponse是因为我有另一个调用strResponse=FormatLineEndings(strResponse)只是一个注释
response=response&strResponse
对性能来说不是很好,因为它疯狂地重新分配字符串。如果预期性能和/或响应较大,则更好的方法是分配一个大缓冲区,该缓冲区不需要在每次数据到达时调整大小,并将数据帧以正确的偏移量插入其中。+1好的建议。。。我使用strResponse是因为我有另一个调用strResponse=FormatLineEndings(strResponse)