如何将解析的 XML 发送到 XMPP 服务器
Posted
技术标签:
【中文标题】如何将解析的 XML 发送到 XMPP 服务器【英文标题】:How to send parsed XML to XMPP server 【发布时间】:2012-07-09 10:16:19 【问题描述】:这是Getting anwser from Jabber Server提出的新问题
你不会成功地想到你收到的 XML 一个文件,这是您的 Unexpected end of file has occurred 错误 来自。您必须逐步解析 XML。
好的,我的问题是怎么做?如何发送未关闭的xml图片?
我应该序列化对象然后发送吗?
顺便说一句。我不能使用现有的库,因为在 Windows Phone 7.5 中没有。
【问题讨论】:
有适用于 Windows Phone 7.X 的库。您可以从这里找到它们:xmpp.org/xmpp-software/libraries @Alex 你能说出一个吗?因为我没有看到任何人。 以矩阵和 IP*Works 为例。如果其他开源库与您的许可兼容,它们也可以进行一些修改。 Matrix 也适用于 $ 和 IP*Works。 我将为此修改自己,但如果您无法弄清楚这部分,那么您将无法在以后出现的更难的部分上取得成功,例如实施 SASL。说真的,为了在 JabberNet 中解决这个问题,我最终将 James Clark 的 XP 移植到了 C#,这并非易事。 【参考方案1】:让我用一个例子来详细解释一下(sn-ps取自here)。
您不会成功地考虑收到的 XML,例如 一个文件,这是您的 Unexpected end of file has occurred 错误 来自。您必须逐步解析 XML。
当您连接到 XMPP 时,您会打开与服务器的连接。为此,您发送如下内容...
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
...让我们暂时忽略身份验证并假设它有效。您会注意到仅这一节不是有效的 XML(元素未关闭)。但是,对于 XMPP,没关系。服务器将发回它自己的消息,告诉您一切顺利。现在我们知道我们可以发送我们的消息节了。我们输入消息,然后发送...
<message from='juliet@example.com' to='romeo@example.net'>
<body>Romeo, romeo...</body>
</message>
几秒钟后,我们决定下线...
<presence type='unavailable'/>
</stream:stream>
现在让我们看看我们发送了什么......
<stream:stream
to='example.com'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'
version='1.0'>
<!-- A few seconds elapsed -->
<message from='juliet@example.com' to='romeo@example.net'>
<body>Romeo, romeo...</body>
</message>
<!-- A few seconds elapsed -->
<presence type='unavailable'/>
</stream:stream>
因此,最终,您可以将与服务器的交互视为您正在创建一个最终成为完全有效的 XML 文档的文档。当您第一次学习 XMPP 时,这是一种很好的思考方式。
但是,您是在一段时间内创建此文档,而不是一次全部创建。 XML 库通常不会认为您现在只创建文档的一部分:它们关注的是一次创建整个文档。这就是为什么传统的 XML 库可能对您编写 XMPP 程序没有帮助的原因。此外,一个简单的 XML 库将无法处理额外的信息,例如身份验证逻辑。
最后,您可以编写自己的库。但是,您在选择工具时需要非常小心(正如我之前所说,XML 库可能无法处理这些部分 XML 创建)。
不管怎样,最后,你的问题是……
How can I send not closed pice of xml?
答案是:找一个图书馆为你做这件事。而且我不仅仅指 XML 部分:我指的是所有 XMPP。正确的库甚至不需要您关心 XML 甚至存在的事实,除非您真的很先进。如果你找不到图书馆...
-
仔细观察。花一天时间寻找图书馆仍然比自己制作一个月的时间要少。
看看你是否能找到一个开源库来满足你的大部分需求。然后,解决不同的部分,或者自己更改源代码以填补空白。
【讨论】:
【参考方案2】:XMPP 协议基于 XML 代码。基本上到此为止。与服务器的连接是通过使用一个开始标签来建立的,并且在认证之后,更多的 XML 消息被发送到服务器和从服务器发送,这被称为节。完成服务器后,XML“文件”将使用结束标记关闭。 .然后服务器关闭套接字。因此,您可以在不关闭“文件”的情况下发送 XML 代码。 希望这能帮助你理解。
【讨论】:
以上是关于如何将解析的 XML 发送到 XMPP 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如何通过xmpp gcm将ack从android应用程序发送到服务器