Я разрабатываю приложение Java для общения с устройствами в XMPP.Java Smack 4.1 XMPP может отправлять сообщения, но не может их получать
Учитывая журналы, я могу отправлять сообщения, но я не могу получить их
Вот мой код
XMPPListener.java
package messaging;
import java.io.IOException;
import org.jivesoftware.smack.AbstractXMPPConnection;
import org.jivesoftware.smack.MessageListener;
import org.jivesoftware.smack.ConnectionConfiguration.SecurityMode;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.SmackException.NotConnectedException;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.chat.ChatManagerListener;
import org.jivesoftware.smack.chat.ChatMessageListener;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
public class XMPPListener implements MessageListener {
AbstractXMPPConnection connection;
public XMPPListener(String host, int port, String serviceName){
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder().
setHost(host)
.setServiceName(serviceName)
.setSecurityMode(SecurityMode.ifpossible)
.setPort(port)
.setDebuggerEnabled(true)
.build();
this.connection = new XMPPTCPConnection(config);
}
public void connect() {
try {
this.connection.connect();
} catch (SmackException | IOException | XMPPException e) {
e.printStackTrace();
}
}
public void login(String userName, String password) throws XMPPException {
try {
this.connection.login(userName, password);
} catch (SmackException | IOException e) {
e.printStackTrace();
}
}
public void sendMessage(String message, String to) throws XMPPException {
Chat chat = ChatManager.getInstanceFor(connection).createChat(to);
try {
chat.sendMessage(message);
} catch (NotConnectedException e) {
e.printStackTrace();
}
}
public void listenChat(String name){
ChatManager manager = ChatManager.getInstanceFor(this.connection);
manager.addChatListener(new ChatManagerListener() {
@Override
public void chatCreated(Chat chat, boolean createdLocally) {
System.out.println("Created chat");
chat.addMessageListener(new ChatMessageListener() {
@Override
public void processMessage(Chat chat, Message message) {
System.out.println(message.getBody());
}
});
}
});
}
public void disconnect() {
connection.disconnect();
}
@Override
public void processMessage(Message message) {
System.out.println("Received something: " + message.getBody());
}
}
Main.java
XMPPListener xmppListener = new XMPPListener("ajabber.me",5222,"ajabber.me");
try {
xmppListener.connect();
xmppListener.login(user, password);
xmppListener.listenChat(to);
while(true){
xmppListener.sendMessage("Spack me spack me, Ho !", to);
Thread.sleep(10000);
}
} catch (XMPPException e2) {
e2.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
В этом коде я подключаюсь к случайному серверу, который я нашел здесь: list of servers. Тогда я пытаюсь отправить несколько сообщений У меня есть на следующие журналы
11:51:56 AM SENT (0): <stream:stream xmlns='jabber:client' to='ajabber.me' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
11:51:56 AM RECV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='11102383658626487319' from='ajabber.me' version='1.0' xml:lang='en'><stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-
one.net/en/ejabberd/' ver='9BNWaDsRr/HNe8AdlF+JvcDY2L0='/><starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'><required/></starttls></stream:features>
11:51:56 AM SENT (0): <starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'></starttls>
11:51:56 AM RECV (0): <proceed xmlns='urn:ietf:params:xml:ns:xmpp-tls'/>
11:51:57 AM SENT (0): <stream:stream xmlns='jabber:client' to='ajabber.me' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' xml:lang='en'>
11:51:57 AM RECV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='9208753033211689749' from='ajabber.me' version='1.0' xml:lang='en'>
11:51:57 AM RECV (0): <stream:features><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.process-one.net/en/ejabberd/' ver='9BNWaDsRr/HNe8AdlF+JvcDY2L0='/><register xmlns='http://jabber.org/features/iq-register'/><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism><mechanism>X-OAUTH2</mechanism><mechanism>SCRAM-SHA-1</mechanism></mechanisms></stream:features>
chat created
11:51:57 AM SENT (0): <message to='[email protected]' id='9ptjB-3' type='chat'><body>coucou</body><thread>d0b9f5a3-515a-4d53-9795-ca112962d4f8</thread></message>
chat created
11:51:59 AM SENT (0): <message to='[email protected]' id='9ptjB-4' type='chat'><body>coucou</body><thread>a6dbc7a0-2b3a-4a30-9be6-2b1e2995cadb</thread></message>
Учитывая эти журналы, я предполагаю, что сообщения отправляются и чат также создан, но, кажется, что я никогда не получать сообщения. Могли бы вы, ребята, помочь мне решить эту проблему?
Я бегу Java 1.8 и Smack 4,7
EDIT
Я попытался с помощью Спарк: мне удалось поговорить с моим приложением (в клиенте Спарк), я также редактировал свой код как новая версия
Вот доказательство с прекрасным скриншоте
Однако я до сих пор не могу получить мои сообщения: Я вижу их в журналах, но этот метод в чате слушателя не называется
ЖУРНАЛОВ
03:17:22 PM RECV (0): <message from='[email protected]/Spark' to='[email protected]/Smack' id='NdNHr-150' type='chat'><body>Wololo</body><thread>5292f083-bba9-4a63-ab40-9718b5e00bd0</thread><x xmlns='jabber:x:event'><offline/><composing/></x></message>
ПОСЛЕДНИЙ EDIT
Мои код работает с вышеуказанным, особое спасибо MrKp
Спасибо за ответ! Я попробую ваше решение, и я держу вас в курсе. –
Я последовал за вами советами, я знаю, что использовать Spark как приемник (и режим эха). Мне удается заставить мое программное обеспечение разговаривать со мной в моей Спарке, я могу поговорить с ним. Но когда я разговариваю с ним, вместо того, чтобы отображать то, что я ввел в метод processMessage, я получаю только журналы: ** 03: 07: 58 PM RECV (0): <сообщение from='[email protected]/Spark ' to='[email protected]/Smack 'id =' NdNHr-87 'type =' chat '>
wololoХорошо, я нашел решение, большое спасибо за вашу помощь MrPk, наслаждайтесь продажами Steam;) –