0

Microsoft の Xmpp Msn API に接続するために smack を使用しようとしています。昨年 4 月、彼らはクライアントに「see-other-host」xmpp 仕様の実装を強制する実装の変更を加えました。「xmpp.messenger.live.com」に接続しようとすると、

stream:error (see-other-host) at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:260) at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43) at org.jivesoftware. smack.PacketReader$1.run(PacketReader.java:70)

デバッグ中ですが、未加工の受信パケットを確認できます

    <stream:stream from="messenger.live.com" version="1.0" id="59784" xmlns="jabber:client"     xmlns:stream="http://etherx.jabber.org/streams">
<stream:features xmlns:stream="http://etherx.jabber.org/streams"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required /></starttls></stream:features>
<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls" />
<stream:stream from="messenger.live.com" version="1.0" id="59785" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams">
<stream:error xmlns:stream="http://etherx.jabber.org/streams"><see-other-host xmlns="urn:ietf:params:xml:ns:xmpp-streams">BY2MSG3020517.gateway.edge.messenge r.live.com</see-other-host></stream:error>

しかし、そのリダイレクトを傍受して処理する方法を見つけることができません。誰もこれをやったことがありますか?どんな助けでも大歓迎です。ありがとう。

ところで、私はすでにこれを smack フォーラムに投稿しましたが、返信がありません。これが相互投稿と見なされないことを願っています。

4

3 に答える 3

2

この背景は、問題の解決に役立つ場合があります

see-other-host ストリーム エラーは、クライアントを別のサーバーにリダイレクトします。Messenger の場合、現在のサーバーがサービスを停止した場合、または負荷分散のために別のサーバーに接続する場合に、クライアントが別のサーバーにクリーンに切り替えられるようにすることを目的としています。

SAMCK を使用するサンプル Java コードに基づくと、次の 2 つの問題があります。

  1. 登録された接続リスナーは、例外の通知を受け取りません
  2. XMPPException からストリーム エラーのテキスト要素にアクセスする方法がありません

リダイレクトを内部で処理するのが最も友好的な解決策ですが、クライアントに新しいサーバーを通知することで、少なくともクライアントはユーザーの介入なしに新しい接続を確立できるようになります。

于 2012-08-21T18:45:56.717 に答える
0

試しに、SMACK API に see-other-host サポートを追加しました。これで、see-other-host アドレスを例外として取得できます。たとえば、messenger.live.com アドレスに接続しようとすると、 see-other-host : BAYMSG1020118.gateway.messenger.live.com が正常に取得されます。次に、 BAYMSG1020118.gateway.messenger.live.com に接続しようとすると、別のアドレスで see-other-host が再び取得されます: BY2MSG4010610.gateway.messenger.live.com 最後に、BY2MSG4010610.gateway.messenger に接続しようとすると。 live.com 、私はこの例外を取得しています:

No response from the server.: 
java.lang.NullPointerException
at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:73)
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:211)
at org.jivesoftware.smack.Connection.login(Connection.java:348)
at com.ms.wlm.XmppClient.logIn(XmppClient.java:161)
at com.ms.wlm.Program.main(Program.java:62)

この結果を Smack の皆さんにも共有します。必要に応じて、xmpp トラフィックのキャプチャを電子メールで送信できます。よろしく、 アルパー・オズダマー

于 2012-07-30T11:05:48.297 に答える