簡體   English   中英

Tcp xml 通信 C#

[英]Tcp xml communication C#

我需要使用 xml 消息通過 tcp 建立雙向通信。 實現這一點的最佳方法是什么? 我不確定消息是否會以\\n結尾。 我曾想過使用TcpClient.GetStream()讀數據流byte后, byte和檢查一個完整的XML消息是否已經到來。 但這聽起來應該可以做得更好。

重要信息:

  • 這是一個裸tcp通信,沒有http或任何東西。
  • 一對一通信不像網絡服務器連接到許多客戶端
  • 就像之前說的,我不能確定對方是否會以\\n結束消息

如果我理解正確,您收到的規范表明:

  • xml 正在通過 TCP 發送,沒有標頭或消息結束指示符
  • 通過同一個連接發送多條消息

在這種情況下,找出(有效)xml 消息在哪里結束的唯一方法是解析其結構並找到根節點的結束元素。 將 xml 聲明<?xml ...?>視為消息分隔符是不可靠的,除非保證這包含在每個 xml 消息中。

如果我是你,我會嘗試說服對方這不是一個可靠的消息協議——它所需要的只是一個損壞的 xml 文件(例如缺少一個結束元素),你的程序將無法處理任何后續該連接上的消息。

否則,我將使用帶有ConformanceLevel.FragmentXmlReader讀取下一個開始元素並使用其ReadSubtree()功能來獲取單個消息。 然后可以將此“子樹閱讀器”提供給XmlDocument.Load()以進行進一步處理。 XmlReader會破壞除第一條消息之外的所有 xml 聲明( <?xml ...?> ),因此您需要在XmlReader和流之間使用TextReaderXmlReader這些。

所有這一切只是為了“讓它發揮作用”,遠非理想。 如果他們只是簡單地添加一個固定長度的標頭或使用眾所周知的協議,您將擁有一個代碼更少的更可靠的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM