0

ジャバーサーバーに接続してサーバーの回答を読み取りたい:

       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);
            }
        }

帰りXDocument.Load(reader)に私は例外を得る'1.0' is an unexpected token. The expected token is '"' or '''。どうすればそれを解決できますか?

なぜ私はそれが欲しいのですか?自分自身を承認してステータスを変更しても、アカウントには影響しないためです。

4

2 に答える 2

4

独自のXMPPライブラリを最初から作成するのではなく、既存のライブラリの1つを選択してください

Unexpected end of file has occurred受け取ったXMLをファイルのように考えると、エラーの原因となるファイルのように考えることはできません。XMLを段階的に解析する必要があります。

于 2012-07-05T22:07:06.537 に答える
1

これ(の宣言でmessage):

<?xml version=1.0?>

無効なXML宣言です。例外として、次のことが必要です。

<?xml version="1.0" ?>

これはJabberやソケットとは関係がなく、すべてがXMLと関係があることに注意してください。例外メッセージとスタックトレースに注意を払うことが重要です。そうすれば、この種のことを自分で診断できます。問題の領域を切り分けて、その1ビットだけを切り分けて取り組むことができるようにする必要があります。

(ちなみに、そのXMLの残りの部分もかなりバストに見えます。)

于 2012-07-05T13:01:32.507 に答える