C# 从Jabber服务器获取答案

C# 从Jabber服务器获取答案,c#,windows-phone-7,xmpp,C#,Windows Phone 7,Xmpp,我想连接我的jabber服务器并读取服务器答案: DnsEndPoint host = new DnsEndPoint("talk.google.com", 5222); Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SocketAsyncEventArgs args = new SocketAsyncEvent

我想连接我的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);
            }
        }
DnsEndPoint host=newdnsendpoint(“talk.google.com”,5222);
Socket Socket=新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp);
SocketAsyncEventArgs args=新的SocketAsyncEventArgs();
公开作废开始()
{
字符串消息=”;
var buffer=Encoding.UTF8.GetBytes(消息);
args.RemoteEndPoint=主机;
args.Completed+=SocketAsyncEventArgs\u Completed;
参数SetBuffer(缓冲区,0,缓冲区长度);
bool completesAsynchronously=socket.ConnectAsync(args);
如果(!CompleteSynchronous)
{
SocketAsyncEventArgs_已完成(args.ConnectSocket,args);
}
}
私有无效SocketAsyncEventArgs_已完成(对象发送方,SocketAsyncEventArgs e)
{
如果(例如SocketError!=SocketError.Success)
{
Deployment.Current.Dispatcher.BeginInvoke(()=>MessageBox.Show(“套接字操作期间出错:+e.SocketError));
返回;
}
字节[]缓冲区=e.缓冲区;
XDocument temp=ConvertByteArrayToXml(缓冲区);
}
XDocument ConvertByteArrayToXml(字节[]数据)
{
XmlReaderSettings设置=新建XmlReaderSettings();
使用(内存流=新内存流(数据))
使用(XmlReader=XmlReader.Create(流、设置))
{
返回XDocument.Load(读卡器);
}
}
返回时
XDocument.Load(reader)
I get exeption
“1.0”是一个意外的标记。所需的令牌为'''或''
。如何解决它

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

这(在您对
消息的声明中)


是无效的XML声明。根据异常,您需要:

<?xml version="1.0" ?>

请注意,这与Jabber或sockets无关,而与XML有关。重要的是要注意异常消息和堆栈跟踪,这样您就可以自己诊断这类事情:您需要能够隔离问题的区域,这样您就可以单独处理这一点

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

这(在您对
消息的声明中)


是无效的XML声明。根据异常,您需要:

<?xml version="1.0" ?>

请注意,这与Jabber或sockets无关,而与XML有关。重要的是要注意异常消息和堆栈跟踪,这样您就可以自己诊断这类事情:您需要能够隔离问题的区域,这样您就可以单独处理这一点


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

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


您不会成功地将收到的XML看作是一个文件,这是发生
意外的文件结尾错误的原因。您必须以增量方式解析XML。

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


你不会成功地将收到的XML看作是一个文件,这是你的
意外文件结尾出现的地方
错误的来源。你必须增量解析XML。

@Dudi:它不是来自谷歌服务器-你的程序中已经硬编码了字符串!对!我修复了它,现在开始t
名称中不能包含“=”字符,十六进制值0x3D。
@Dudi:是的,正如我编辑的那样:您的XML在各种方面无效。请修复它。您可能是从某处复制了此示例,但请查找其他示例。(老实说,不清楚您为什么要解析首先发送的消息。您的代码目前有点混乱。)好的,现在我认为我的消息是可以接受的,因为现在我得到了
意外的文件结尾。以下元素没有关闭:stream
我无法关闭它,因为我关闭了会话。请参阅我的答案。您必须以增量方式解析XML,而不是作为文档。在C#中,这可能有点棘手,因为各种ncremental解析器使用。@Dudi:它不是来自谷歌服务器-你的程序中已经硬编码了这个字符串!对!我修复了它,现在我得到了
字符,十六进制值0x3D,不能包含在名称中。
@Dudi:是的,正如我编辑的那样:你的XML在各种方面都是无效的。修复它。可能是你从在某个地方,但寻找其他示例。(老实说,不清楚您为什么要首先解析发送的消息。您的代码目前有点混乱。)好的,现在我认为我的消息是可以接受的,因为现在我得到了
意外的文件结尾。以下元素没有关闭:stream
我无法关闭它,因为我关闭了会话。请参阅我的答案。您必须以增量方式解析XML,而不是作为文档。在C#中,这可能有点棘手,因为各种n语法分析器使用。有一个用于windows phone的吗?有一个用于windows phone的吗?