feature-not-implemented xmlns =' urn:ietf:params:xml:ns:xmpp-stanzas smack android

时间:2016-03-09 10:23:38

标签: android smack

我正在尝试开发聊天应用程序,但我尝试编写xmmp节点服务器而不是Google消息服务。 我可以登录到server.But获取消息说功能未实现。

<iq to='359648069251166@10.10.25.126/Smack' id='cu03M-5' type='error'><error type='cancel'><feature-not-implemented xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/></error></iq>

android代码

            final TelephonyManager mngr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
            XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                    .setServiceName(IPADRESS)
                    .setHost(IPADRESS)
                    .setPort(5222)
                    .build();
            AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
            conn2.setPacketReplyTimeout(1000);
            SmackConfiguration.DEBUG = true;
            conn2.connect();

            conn2.addConnectionListener(new ConnectionListener() {
                @Override
                public void connected(XMPPConnection connection) {

                }

                @Override
                public void authenticated(XMPPConnection connection, boolean resumed) {

                }

                @Override
                public void connectionClosed() {

                }

                @Override
                public void connectionClosedOnError(Exception e) {

                }

                @Override
                public void reconnectionSuccessful() {

                }

                @Override
                public void reconnectingIn(int seconds) {

                }

                @Override
                public void reconnectionFailed(Exception e) {

                }
            });
            conn2.addAsyncPacketListener(new PacketListener() {
                @Override
                public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                    if (packet != null) {
                        Log.d("stanza", "received" + packet.toXML());
                        Toast.makeText(getApplicationContext(), packet.toXML(), Toast.LENGTH_LONG).show();
                    }
                }
            }, new PacketFilter() {
                @Override
                public boolean accept(Stanza packet) {
                    return true;
                }
            });
            Roster roster = Roster.getInstanceFor(conn2);
//Get all rosters
            Collection<RosterEntry> entries = roster.getEntries();
//loop through
            for (RosterEntry entry : entries) {
//example: get presence, type, mode, status
                Presence entryPresence = roster.getPresence(entry.getUser());
                Presence.Type userType = entryPresence.getType();
                Presence.Mode mode = entryPresence.getMode();
                String status = entryPresence.getStatus();
                Log.d("stanza",userType+" "+status);
            }
            roster.addRosterListener(new RosterListener() {
                @Override
                public void presenceChanged(Presence presence) {
                    //Called when the presence of a roster entry is changed
                }
                @Override
                public void entriesUpdated(Collection<String> arg0) {
                    // Called when a roster entries are updated.
                }
                @Override
                public void entriesDeleted(Collection<String> arg0) {
                    // Called when a roster entries are removed.
                }
                @Override
                public void entriesAdded(Collection<String> arg0) {
                    // Called when a roster entries are added.
                }
            });
            conn2.login(mngr.getDeviceId(), "secret");
            Presence presence = new Presence(Presence.Type.available);
            presence.setStatus("I’m available");
            conn2.sendPacket(presence);
            ChatManager chatManager = ChatManager.getInstanceFor(conn2);

            Chat chat = chatManager.createChat(mngr.getDeviceId(), new ChatMessageListener() {
                @Override
                public void processMessage(final org.jivesoftware.smack.chat.Chat chat,
                                           final Message message) {
                    Log.i("MyXMPP_MESSAGE_LISTENER", "Xmpp message received: '"
                            + message);

                    if (message.getType() == Message.Type.chat
                            && message.getBody() != null) {
                        Log.d("stanza", message.toString());

                        // processMessage(chatMessage);
                    }
                }
            });
            // Add a packet listener to get messages sent to us

            Message message = new Message();
            message.setFrom(mngr.getDeviceId());
            message.setTo(mngr.getDeviceId());
            message.setType(Message.Type.chat);
            message.setSubject("jhelloworld");
            chat.sendMessage(message);


        }catch (Exception e){
            Log.d("error",e.getMessage());
        }

我从here获取了服务器。

服务器端代码。

var startServer = function (done) {
  // Sets up the server.
  server = new xmpp.C2S.TCPServer({
    port: 5222,
    domain: 'localhost'
  })



      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:', client.jid.local, 'DISCONNECT')
        })
      })

      server.on('listening', done)
    }
    startServer(function (){

        console.log("server localhost started at 5222 localport");
    });

我尝试了很多来自stackoverflow和smack社区的解决方案,但没有。 将不胜感激。

0 个答案:

没有答案