您不会成功地将收到的 XML 视为文件,这就是您的 Unexpected end of file has occurred 错误的来源。您必须逐步解析 XML。
好的,我的问题是如何?如何发送未关闭的 xml 图像?
我应该序列化对象然后发送吗?
顺便提一句。我不能使用现有的库,因为在 Windows Phone 7.5 中没有。
您不会成功地将收到的 XML 视为文件,这就是您的 Unexpected end of file has occurred 错误的来源。您必须逐步解析 XML。
好的,我的问题是如何?如何发送未关闭的 xml 图像?
我应该序列化对象然后发送吗?
顺便提一句。我不能使用现有的库,因为在 Windows Phone 7.5 中没有。
让我用一个例子来详细解释一下(摘自这里的片段)。
您不会成功地将收到的 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 甚至存在的事实,除非您真的很先进。如果找不到图书馆...
XMPP 协议基于 XML 代码。基本上到此为止。与服务器的连接是通过使用一个开始标签来建立的,并且在认证之后,更多的 XML 消息被发送到服务器和从服务器发送,这被称为节。完成服务器后,XML“文件”将使用结束标记关闭。. 然后服务器关闭套接字。因此,您可以在不关闭“文件”的情况下发送 XML 代码。希望这可以帮助您理解。