Java 如何向服务器验证我的XMPP客户机?
我正在为一个大学项目编写一个XMPP客户端,该项目应该发送和接收来自其他客户端的消息。我对XMPP及其语法有基本了解,但似乎无法连接到gtalk服务器。免责声明-我不能使用Smack或任何其他库Java 如何向服务器验证我的XMPP客户机?,java,sockets,authentication,xmpp,google-talk,Java,Sockets,Authentication,Xmpp,Google Talk,我正在为一个大学项目编写一个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='
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();
sockets=newsocket(“talk.l.google.com”,5222);
PrintWriter out=新的PrintWriter(s.getOutputStream());
out.println(“”);
out.println(“”);
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>
X-OAUTH2X-GOOGLE-TOKEN
如果我尝试发送一些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>");
out.println(“\r\n”
+“你为什么?\r\n”
+"");
- 说明,未授权错误与我未通过服务器身份验证有关。我浏览了google、stackoverflow、xmpp的原始rfc,似乎找不到任何关于如何向服务器验证自己的信息。我似乎在stackoverflow或任何其他平台上也找不到任何示例代码,因为每个人都建议使用Smack或任何其他xmpp库
- 关于流协商部分的另一件事是,我的部分有一个“from”属性,这意味着服务器响应应该包括一个“to”属性,但事实并非如此。例如:
I:
R:
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'>