应用程序无法连接到本地xmpp服务器

时间:2017-12-04 10:29:32

标签: android xmpp smack

我使用此代码将我的Android应用程序连接到XMPP服务器,即带有Smack API的Openfire服务器

public class MyXMPP {

private static final String DOMAIN = "localhost";
private static final String HOST = "192.168.1.2";
private static final int PORT = 9090;
private String userName ="";
private String passWord = "";
AbstractXMPPConnection connection ;
ChatManager chatmanager ;
Chat newChat;
XMPPConnectionListener connectionListener = new XMPPConnectionListener();
private boolean connected;
private boolean isToasted;
private boolean chat_created;
private boolean loggedin;
Context c;


//Initialize
public void init(Context context,String userId,String pwd ) {
    Log.i("XMPP", "Initializing!");
    this.userName = userId;
    this.passWord = pwd;
    this.c=context;
    XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();

    configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    configBuilder.setResource("Android");
    configBuilder.setServiceName(DOMAIN);
    configBuilder.setHost(HOST);
    configBuilder.setPort(PORT);
    //configBuilder.setDebuggerEnabled(true);
    connection = new XMPPTCPConnection(configBuilder.build());
    connection.addConnectionListener(connectionListener);





}

// Disconnect Function
public void disconnectConnection(){

    new Thread(new Runnable() {
        @Override
        public void run() {
            connection.disconnect();
        }
    }).start();
}

public void connectConnection()
{
    AsyncTask<Void, Void, Boolean> connectionThread = new AsyncTask<Void, Void, Boolean>() {

        @Override
        protected Boolean doInBackground(Void... arg0) {

            // Create a connection
            try {
                //connection.setPacketReplyTimeout(30000);
                connection.connect();
                login();
                connected = true;

            } catch (IOException e) {
            }
            catch (SmackException e)
            {


                Log.v("errror",e.getMessage());

            } catch (XMPPException e) {
                                }

            return null;
        }
    };
    connectionThread.execute();
}


public void sendMsg() {
    if (connection.isConnected()== true) {
        // Assume we've created an XMPPConnection name "connection"._
        chatmanager = ChatManager.getInstanceFor(connection);
        newChat = chatmanager.createChat("concurer@nimbuzz.com");

        try {
            newChat.sendMessage("Howdy!");
        } catch (SmackException.NotConnectedException e) {
            e.printStackTrace();
        }
    }
}

public void login() {

    try {
        connection.login(userName, passWord);
        Log.i("LOGIN", "Yey! We're connected to the Xmpp server!");
        // Toast.makeText(c,"Login successfully",Toast.LENGTH_LONG).show();

    } catch (XMPPException | SmackException | IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
    }

}



//Connection Listener to check connection state
public class XMPPConnectionListener implements ConnectionListener {
    @Override
    public void connected(final XMPPConnection connection) {

        Log.d("xmpp", "Connected!");
        connected = true;
        if (!connection.isAuthenticated()) {
            login();
        }
    }

    @Override
    public void connectionClosed() {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub


                }
            });
        Log.d("xmpp", "ConnectionCLosed!");
        connected = false;
        chat_created = false;
        loggedin = false;
    }

    @Override
    public void connectionClosedOnError(Exception arg0) {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {

                }
            });
        Log.d("xmpp", "ConnectionClosedOn Error!"+arg0);
        connected = false;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void reconnectingIn(int arg0) {

        Log.d("xmpp", "Reconnectingin " + arg0);

        loggedin = false;
    }

    @Override
    public void reconnectionFailed(Exception arg0) {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {



                }
            });
        Log.d("xmpp", "ReconnectionFailed!");
        connected = false;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void reconnectionSuccessful() {
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub



                }
            });
        Log.d("xmpp", "ReconnectionSuccessful");
        connected = true;

        chat_created = false;
        loggedin = false;
    }

    @Override
    public void authenticated(XMPPConnection arg0, boolean arg1) {
        Log.d("xmpp", "Authenticated!");
        loggedin = true;

        chat_created = false;
        new Thread(new Runnable() {

            @Override
            public void run() {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }).start();
        if (isToasted)

            new Handler(Looper.getMainLooper()).post(new Runnable() {

                @Override
                public void run() {
                    // TODO Auto-generated method stub



                }
            });
    }
}


}

但获得例外,即#34;在回复超时内未收到任何回复。超时为10000毫秒(~10秒)。使用过滤器:未使用过滤器或过滤器为&#39; null&#39;。&#34;。
如果我在代码中遗漏了某些内容,请告诉我。

0 个答案:

没有答案