连接到xmpp会出现Socket异常(权限被拒绝)

时间:2016-04-05 13:12:17

标签: java android sockets xmpp smack

我正在尝试使用smack库通过我的Android应用程序连接到openfire服务器。当我连接到服务器时它给了我和错误

以下地址失败:'192.168.0.31:5222'失败,因为java.net.SocketException:套接字失败:EACCES(权限被拒绝)

但是我已经在我的清单中获得了互联网许可。

我正在使用的代码是..

public void init(String mUsername, String mPassword) {


    Log.i(TAG, "connect()");
    config = XMPPTCPConnectionConfiguration.builder();
    config.setServiceName(mServiceName);
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    config.setHost(mServiceName);
    config.setPort(5222);
    config.setDebuggerEnabled(true);
    config.setResource("sender");
   // config.setCompressionEnabled(true);
    config.setUsernameAndPassword(mUsername, mPassword);
    XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    XMPPTCPConnection.setUseStreamManagementDefault(true);


    mConnection = new XMPPTCPConnection(config.build());
    mConnection.addConnectionListener(this);
    ChatManager.getInstanceFor(mConnection).addChatListener(this);


    gson = new Gson();
    connectAndLoginAnonymously();
}

public void connectAndLoginAnonymously() {
    mRegisterTask = new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            try {
                mConnection.connect();
                DeliveryReceiptManager dm = DeliveryReceiptManager
                        .getInstanceFor(mConnection);
                dm.setAutoReceiptMode(DeliveryReceiptManager.AutoReceiptMode.always);
                dm.addReceiptReceivedListener(new ReceiptReceivedListener() {

                    @Override
                    public void onReceiptReceived(final String fromid,
                                                  final String toid, final String msgid,
                                                  final Stanza packet) {

                    }
                });
                mConnection.login();
            } catch (SmackException | XMPPException | IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Void res) {
        }
    };

    // execute AsyncTask
    mRegisterTask.execute();
}




public void disconnect() {
    Log.i(TAG, "disconnect()");
    if (mConnection != null) {
        mConnection.disconnect();
    }
}

//For Creating new User.
public boolean createNewAccount(String username, String newpassword) {
    boolean status = false;
    if (mConnection == null) {
        try {
            mConnection.connect();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }

    try {
     //   String newusername = username + mConnection.getServiceName();
        Log.i("service", mConnection.getServiceName());
        AccountManager accountManager = AccountManager.getInstance(mConnection);
        accountManager.createAccount(username, newpassword);
        status = true;
    } catch (SmackException.NoResponseException e) {
        status = false;
        e.printStackTrace();
    } catch (XMPPException.XMPPErrorException e) {
        e.printStackTrace();
        status = false;
    } catch (SmackException.NotConnectedException e) {
        e.printStackTrace();
        status = false;
    }
    mConnection.disconnect();
    return status;

}

从我的登录活动中,当我打电话 smackConnection.init(用户,密码); 它给了我 java.net.SocketException权限被拒绝的错误。

错误日志如下。

04-05 18:28:18.142 9575-9575/dhaval.com.chatdemo I/SMACK: connect()
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:

org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: '192.168.0.31:5222' failed because java.net.SocketException: socket failed: EACCES (Permission denied)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:605)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:839)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:365)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at dhaval.com.chatdemo.SmackConnection$1.doInBackground(SmackConnection.java:104)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at dhaval.com.chatdemo.SmackConnection$1.doInBackground(SmackConnection.java:100)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-05 18:28:18.152 9575-9604/dhaval.com.chatdemo W/System.err:     at java.lang.Thread.run(Thread.java:841)

清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="dhaval.com.chatdemo">

 <uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".CreateAccountPage"></activity>
</application>

我在这做错了吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

希望您的清单中缺少使用权限INTERNET。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>