我正在通過TCP/IP連接傳遞XML字符串的C++客戶端/服務器項目。我的問題是關於指示已收到完整字符串的正確方法。我正在考慮空終止的字符串或首先發送XML字符串的長度,因此客戶端/服務器可以知道何時接收到完整的字符串。如何在自定義TCP客戶端/服務器之間正確傳遞XML字符串?
客戶端可以發送GET/SET命令,服務器可以回覆,併發送連續的結果流。例如:客戶端發送<GET ID="DATA1" />
和服務器回覆<ID="DATA1" VAL="..." />
或服務器可以發送連續流:
在這種情況下,客戶端可能會收到一個閱讀:
<ID="DATA1" VAL="..." /><ID="DATA2" VAL="..." />
或者,如果發送大量數據可能需要多次讀取才能讀取整個字符串。
使用空值終止字符似乎有點簡單化(和休息,如果字符串是unicode的?),併發送一個長度值似乎尷尬,以及:
20<ID="DATA1" VAL="1" />
或<length=20><ID="DATA1" VAL="1" />
這一定已經解決了TX /接收HTML文件,我似乎無法弄清楚。
我爲客戶端使用MFC C++(遺留代碼)服務器和.Net C++/CLI或C#。
任何幫助,非常感謝!
退房http://www.jmarshall.com/easy/http/#structure ...空行(CRLF序列)在HTTP常見的分隔符。我確實希望你在服務器上使用某種XML框架,而不是僅僅將字符串混合在一起來創建XML。但是,如果你是這樣的話,記得要正確地對XML進行編碼,所以如果你發送了一堆帶有段落的文本,它並不會破壞你的協議。 – overslacked 2009-09-13 20:59:14
感謝您的所有答案!所有好主意,我喜歡簡單CRLF分隔的想法,似乎最簡單。從提供的鏈接將這項工作? (帶CRLF ==兩個字節1013) 發送: CRLF 回覆 CRLF CRLF CRLF ... 如下面的答案2所示,可能會出現多行XML回覆。這可能會導致每條線路的CRLF出現問題,而不是響應的結束? 回覆 CRLF <數據ID = 「DATA1」/> CRLF <數據ID = 「DATA2」/> CRLF CRLF –
Brian
2009-09-13 23:19:10
對不起,我是新來的,那最後的評論沒有格式化好 - 我將作爲另一個答案 – Brian 2009-09-13 23:19:56