Я пишу 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 говорит, что ошибка не авторизована из-за отсутствия аутентификации на сервере. Я просмотрел google, stackoverflow, оригинальный rmc xmpp, и я не могу найти какую-либо информацию о том, как я должен аутентифицировать себя на сервере. Я также не могу найти ни одного примера кода в stackoverflow или любой другой платформе, поскольку все просто предлагают использовать Smack или любую другую библиотеку xmpp.
- Еще одна вещь, касающаяся части согласования потока, состоит в том, что моя часть имеет атрибут «от», что должно означать, что ответ сервера должен включать атрибут «к», но это не так. Пример:
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'>