0

我想连接我的 jabber 服务器并阅读服务器答案:

       DnsEndPoint host = new DnsEndPoint("talk.google.com", 5222);
        Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
        SocketAsyncEventArgs args = new SocketAsyncEventArgs();

public void start()
{
 string message = "<?xml version=1.0?><stream:streamto='gmail.com'xmlns='jabber:client'xmlns:stream='http://etherx.jabber.org/streams'version='1.0'>";

            var buffer = Encoding.UTF8.GetBytes(message);

            args.RemoteEndPoint = host;
            args.Completed += SocketAsyncEventArgs_Completed;
            args.SetBuffer(buffer, 0, buffer.Length);

            bool completesAsynchronously = socket.ConnectAsync(args);

            if (!completesAsynchronously)
            {
                SocketAsyncEventArgs_Completed(args.ConnectSocket, args);
            }
}

 private void SocketAsyncEventArgs_Completed(object sender, SocketAsyncEventArgs e)
        {
            if (e.SocketError != SocketError.Success)
            {
                 Deployment.Current.Dispatcher.BeginInvoke(() => MessageBox.Show("Error during socket operation: " + e.SocketError));
                return;
            }
            byte[] buffer = e.Buffer;
            XDocument temp = ConvertByteArrayToXml(buffer);

        }

XDocument ConvertByteArrayToXml(byte[] data)
        {
            XmlReaderSettings settings = new XmlReaderSettings();

            using (MemoryStream stream = new MemoryStream(data))
            using (XmlReader reader = XmlReader.Create(stream, settings))
            {
                return XDocument.Load(reader);
            }
        }

在 ReturnXDocument.Load(reader)我得到 exeption '1.0' is an unexpected token. The expected token is '"' or '''。怎么解决?

为什么我想要它?因为当我授权自己并更改状态时,它不会影响我的帐户。

4

2 回答 2

4

不要从头开始编写自己的 XMPP 库,而是选择现有的一个

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

于 2012-07-05T22:07:06.537 回答
1

这(在您的声明中message):

<?xml version=1.0?>

是无效的 XML 声明。根据例外情况,您需要:

<?xml version="1.0" ?>

请注意,这与 Jabber 或套接字无关,而与 XML 有关。注意异常消息和堆栈跟踪很重要,因此您可以自己诊断这类事情:您需要能够隔离问题所在的区域,以便您可以单独解决这一点。

(顺便说一下,XML 的其余部分看起来也很糟糕。)

于 2012-07-05T13:01:32.507 回答