我與使用Tclientsocket構件實現從TCP/IP服務器返回的XML的哪個請求數據的遺留D6應用程序的工作任務,我需要一個新的第三方服務器整合和我有間歇性的問題接受在服務器的響應中發送完整的數據。發生這種情況時,儘管XML非常小,大約1.76 KB,但我仍然通過多個OnRead事件獲取XML字符串。如何從多次讀取接收套接字數據?
響應的結構是前四個字節返回表示:
字節位置,類型/目的:
0 - 0x02 (STX)
1 - Length, LSB
2 - Length
3 - Length, MSB
Bytes 4+ are the xml payload
但是,程序員之前我只是用Socket.ReceiveText,因爲所有的對於現有邏輯收到的響應非常小,在大多數情況下遠低於200字節......基本上是成功確認或錯誤數據。
會有人頭腦非常給我,我怎樣才能成功地消耗考慮到的是,我得到它在大塊帳戶響應的想法?即使我經常使用Delphi,我也沒有使用過TClientSocket/TServerSocket,我不能改變我更熟悉的東西。
在此先感謝。
雷米!這是我在許多衛星上沒有看到的名字。感謝您的回答和見解。快速提問:如何區分一個或多個讀取事件與一個服務器響應相關聯,而另一個服務器響應是異步本質?例如,在你的示例中,在哪裏應該處理xml,應該在那裏做什麼,以便在下次讀取事件時我會知道它是用於全新的單獨/響應?謝謝! – LeeboJenkowitz
對於命令/響應系統,通常不會使用這種異步讀取模型,除非響應本身是異步的(多個命令可以同時進行並且響應可以按任意順序到達),或者服務器可以在請求的響應之間發送未經請求的消息。在這種情況下,響應通常包含將它們鏈接到原始命令的信息。如果沒有,您至少可以將已完成的XML消息保存到FIFO列表中,並讓您的命令發佈者將其預期的任何XML消息作爲響應提取出來。 –
感謝您的跟進。我相信我現在有一個很好的理解。 – LeeboJenkowitz