4
我想创建一个聊天应用程序与出去使用谷歌消息服务和nodejs xmpp服务器。 因此,我使用了this node js xmpp server,并为android应用程序使用了api。功能没有实现nodejs xmpp android
我不知道为什么,但服务器发送节说功能没有实现。
我写的连接xmpp服务器的android代码。
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setServiceName("localhost")
.setHost(IPADRESS)
.setPort(5222)
.build();
AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
conn2.setPacketReplyTimeout(1000);
SmackConfiguration.DEBUG = true;
conn2.connect();
conn2.login(mngr.getDeviceId(), "secret");
的NodeJS XMPP服务器模块
var startServer = function (done) {
// Sets up the server.
server = new xmpp.C2S.TCPServer({
port: 5222,
domain: 'localhost'
})
// On connection event. When a client connects.
server.on('connection', function (client) {
// That's the way you add mods to a given server.
// Allows the developer to register the jid against anything they want
client.on('register', function (opts, cb) {
console.log('REGISTER')
cb(true)
})
// Allows the developer to authenticate users against anything they want.
client.on('authenticate', function (opts, cb) {
console.log('server:', opts.username, opts.password, 'AUTHENTICATING')
if (opts.password === 'secret') {
console.log('server:', opts.username, 'AUTH OK')
cb(null, opts)
} else {
console.log('server:', opts.username, 'AUTH FAIL')
cb(false)
}
})
client.on('online', function() {
console.log('server:', client.jid.local, 'ONLINE')
client.send("")
})
// Stanza handling
client.on('stanza', function (stanza) {
console.log('server:', client.jid.local, 'stanza', stanza.toString())
var from = stanza.attrs.from
stanza.attrs.from = stanza.attrs.to
stanza.attrs.to = from
client.send(stanza)
})
// Stanza handling
client.on('chat', function (stanza) {
console.log('server:', client.jid.local, 'chat', stanza.toString())
client.send(stanza)
});
// On Disconnect event. When a client disconnects
client.on('disconnect', function() {
console.log('server:', 'DISCONNECT')
})
})
server.on('listening', done)
}
startServer(function(){
console.log("server localhost started at 5222 localport");
});
服务器的NodeJS控制台输出。
server localhost started at 5222 localport
server: 354223060799129 secret AUTHENTICATING
server: 354223060799129 AUTH OK
server: 354223060799129 ONLINE
server: 354223060799129 stanza <iq id="eW469-5" type="get" xmlns:stream="http://etherx.jabber.org/streams" from="[email protected]/Smack"><query xmlns="jabber:iq:roster"/></iq>
server: 354223060799129 stanza <presence id="eW469-6" xmlns:stream="http://etherx.jabber.org/streams" from="[email protected]/Smack"/>
server: 354223060799129 stanza <iq id="eW469-5" type="error" xmlns:stream="http://etherx.jabber.org/streams" from="[email protected]/Smack"><error type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
的Android日志:
03-10 22:57:12.598 8126-8183/gcm.play.android.samples.com.gcmquickstart E/AbstractXMPPConnection: Exception in packet listener
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746)
at org.jivesoftware.smack.roster.Roster$PresencePacketListener.getUserPresences(Roster.java:1134)
at org.jivesoftware.smack.roster.Roster$PresencePacketListener.processPacket(Roster.java:1157)
at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1156)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
03-10 22:57:12.598 8126-8185/gcm.play.android.samples.com.gcmquickstart E/Roster: Exception reloading roster
XMPPError: feature-not-implemented - cancel
at org.jivesoftware.smack.AbstractXMPPConnection$5.processPacket(AbstractXMPPConnection.java:1448)
at org.jivesoftware.smack.AbstractXMPPConnection$3.run(AbstractXMPPConnection.java:1126)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
我尝试了许多解决方案,用于计算器的相似类型的问题但没有work.help将不胜感激。
我是新来的xmpp。如何实现xmpp功能。是否有任何文档? –
去这里: http://xmpp.org/extensions/index.html 和研究RFC 6120和6121.或者正如我建议刚从一个完整的XMPP服务器开始。您可以在这里找到一些选项: http://xmpp.org/software/servers.html – Alex
谢谢。有没有关于使用现有服务器和编写我们自己的服务器的文档? –