gpt4 book ai didi

java - 如何向服务器验证我的 XMPP 客户端?

转载 作者:行者123 更新时间:2023-12-05 07:24:09 25 4
gpt4 key购买 nike

我正在为一个大学项目编写一个 XMPP 客户端,该项目应该从其他客户端发送和接收消息。我对 XMPP 及其语法有基本的了解,但似乎无法连接到 gtalk 服务器。免责声明 - 我不能使用 Smack 或任何其他库。

Socket s = new Socket("talk.l.google.com", 5222);
PrintWriter out = new PrintWriter(s.getOutputStream());
out.println("<?xml version='1.0' encoding='utf-8' ?>");
out.println("<stream:stream "
+ "xmlns='jabber:client' "
+" from='example@gmail.com' to='gmail.com' "
+ " xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>");
out.flush();

我假设连接成功,因为我收到此响应:

<stream:stream from="gmail.com" id="E3A7EFC5647601B3" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features>

如果我尝试发送一些 xml 数据包,例如一条消息,我显然会得到一个

<stream:error><not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-streams"/></stream:error>

我这样发送消息:


out.println("<message to='07xcpozn829nd25ivx1gpp3dug@public.talk.google.com'"
+"from='example@gmail.com'>\r\n"
+"<body>Wherefore art thou?</body>\r\n"
+"</message>");

  • https://xmpp.org/rfcs/rfc6120.html#sasl说,那个 not-authorized 错误与我没有通过服务器进行身份验证有关。我查看了 google、stackoverflow、xmpp 的原始 rfc,但我似乎找不到任何关于我应该如何通过服务器验证自己的信息。我似乎也无法在 stackoverflow 或任何其他平台上找到任何示例代码,因为每个人都只是建议使用 Smack 或任何其他 xmpp 库。
  • 关于流协商部分的另一件事是我的部分有一个“from”属性,这应该意味着服务器响应应该包含一个“to”属性,但事实并非如此。示例:
I: <?xml version='1.0'?>
<stream:stream
from='juliet@im.example.com'
to='im.example.com'
version='1.0'
xml:lang='en'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>

R: <?xml version='1.0'?>
<stream:stream
from='im.example.com'
id='++TR84Sm6A3hnt3Q065SnAbbk3Y='
to='juliet@im.example.com'
version='1.0'
xml:lang='en'
xmlns='jabber:client'
xmlns:stream='http://etherx.jabber.org/streams'>

最佳答案

您一定是在 SASL 协商期间错过了身份验证部分。

查看第 9.1 章。 https://datatracker.ietf.org/doc/rfc6120/ 中的客户端到服务器示例

关于java - 如何向服务器验证我的 XMPP 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com