2011-09-15 140 views
0

我正在使用vb6中的winsock控件來檢查Web服務的可用性。 我做了一個post請求,獲取響應並解析響應頭以檢查響應代碼。VB6 winsock等待響應

響應到達多個數據包。

' 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 

我的問題是,我需要等到檢查響應代碼才能繼續執行。

有沒有辦法做到這一點,而不使用計時器?

謝謝, 亞歷克斯

決定使用定時器畢竟。

+1

只需注意......'response = response&strResponse'對於性能來說並不是很好,因爲它會像瘋狂一樣重新分配字符串。如果期望性能和/或較大的響應,則更好的方法是分配一個不需要在每個DataArrival上調整大小的大緩衝區,並將數據幀插入到正確的偏移量處。 – tcarvin

+0

+1好adivice ...我使用strResponse,因爲我有另一個調用strResponse = FormatLineEndings(strResponse) – thedev

回答

3

每當您收到數據時,都會追加到緩衝區中,然後處理/解析該數據。 它得到使用阻塞插座,意味着你可以在它到來時作出反應。 查看this article網絡協議舉例。

1

在您發送請求時,禁用您的用戶界面中的控件,除了取消按鈕或其他東西。響應完成後,您可以啓用UI並在DataArrival中顯示結果,否則「繼續」。

你真的不希望在VB6程序中阻塞套接字,它們會打破整個Windows編程範例,因爲你沒有可用的工作線程。即使有一個工作者線程,你最終也會以同樣的方式編寫代碼來「暫停」你的UI線程,所以不會有任何損失。

計時器可能是處理請求超時最簡單的方法。