0

这是从 Jabber 服务器获取 anwser的新问题

您不会成功地将收到的 XML 视为文件,这就是您的 Unexpected end of file has occurred 错误的来源。您必须逐步解析 XML。

好的,我的问题是如何?如何发送未关闭的 xml 图像?

我应该序列化对象然后发送吗?

顺便提一句。我不能使用现有的库,因为在 Windows Phone 7.5 中没有。

4

2 回答 2

2

让我用一个例子来详细解释一下(摘自这里的片段)。

您不会成功地将收到的 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 甚至存在的事实,除非您真的很先进。如果找不到图书馆...

  1. 更努力地看。花一天时间寻找图书馆仍然少于一个月自己制作图书馆的时间。
  2. 看看你是否能找到一个开源库来满足你的大部分需求。然后,解决不同的部分,或者自己更改源代码以填补空白。
于 2012-08-15T00:15:46.020 回答
0

XMPP 协议基于 XML 代码。基本上到此为止。与服务器的连接是通过使用一个开始标签来建立的,并且在认证之后,更多的 XML 消息被发送到服务器和从服务器发送,这被称为节。完成服务器后,XML“文件”将使用结束标记关闭。. 然后服务器关闭套接字。因此,您可以在不关闭“文件”的情况下发送 XML 代码。希望这可以帮助您理解。

于 2012-08-14T23:33:18.063 回答