java.net.SocketException:套接字失败:EACCES(权限被拒绝)MongoDB连接

时间:2015-05-11 20:16:58

标签: java android mongodb sockets

我正在尝试在Android应用程序中设置与MongoDB的直接连接,但我无法弄清楚为什么会出现此错误:

Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)

我的代码: DBCONNECT()

import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;

import java.util.Arrays;

public class DBConnect {

    public static DB MongoConnect(){

        MongoCredential credential = MongoCredential.createCredential("user", "database", "password".toCharArray());
        MongoClient mongoClient = new MongoClient(new ServerAddress(), Arrays.asList(credential));


        //MongoClient mongoClient = null;
        try {
            mongoClient = new MongoClient("xxx.xxx.xxx.xxx", 27017);
        } catch (Exception e) {
            e.printStackTrace();
        }
        DB database = mongoClient.getDB("RotterdamHaven");

        return  database;
    }

}

DBCollections()

import com.mongodb.DB;
import com.mongodb.DBCollection;


public class DBCollections {

    public static DBCollection connectToMongoCollection(String collectionName){
        DB database = DBConnect.MongoConnect();
        DBCollection mongoCollection = database.getCollection(collectionName);

        return mongoCollection;
    }

}

我的清单文件:

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</application>

MainActivity文件

    package com.example.bebo.connection;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends ActionBarActivity {

    DBCollection collection = DBCollections.connectToMongoCollection("BolderBedrijfsnaam");

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

我在这个项目中添加了mongo-java-driver-3.0.0.jar文件。 请帮忙。我只需要一个简单的连接。

编辑1: 我更改了清单文件并将权限放在了外面。我收到了另一个错误:

Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 27017) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused)

05-11 22:50:45.493    3465-3484/com.example.bebo.connection W/EGL_emulation﹕ eglSurfaceAttrib not implemented
05-11 22:50:45.493    3465-3484/com.example.bebo.connection W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6ccf760, error=EGL_SUCCESS
05-11 22:51:05.216    3465-3482/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 145.24.222.221:27017
    com.mongodb.MongoSocketOpenException: Exception opening socket
 Caused by: java.net.SocketTimeoutException: failed to connect to /145.24.222.221 (port 27017) after 20000ms

编辑2:

    05-12 09:44:33.434  24339-24339/? V/Zygote﹕ Switching descriptor 32 to /dev/null
05-12 09:44:33.434  24339-24339/? V/Zygote﹕ Switching descriptor 9 to /dev/null
05-12 09:44:33.439  24339-24339/com.example.bebo.connection D/dalvikvm﹕ Late-enabling CheckJNI
05-12 09:44:33.479  24339-24339/com.example.bebo.connection D/ActivityThread﹕ handleBindApplication:com.example.bebo.connection
05-12 09:44:33.479  24339-24339/com.example.bebo.connection D/ActivityThread﹕ setTargetHeapUtilization:0.75
05-12 09:44:33.479  24339-24339/com.example.bebo.connection D/ActivityThread﹕ setTargetHeapMinFree:2097152
05-12 09:44:33.524  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method javax.management.ObjectName.quote, referenced from method com.mongodb.management.JMXConnectionPoolListener.ensureValidValue
05-12 09:44:33.524  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 19259: Ljavax/management/ObjectName;.quote (Ljava/lang/String;)Ljava/lang/String;
05-12 09:44:33.524  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0006
05-12 09:44:33.524  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method java.lang.management.ManagementFactory.getRuntimeMXBean, referenced from method org.bson.types.ObjectId.createProcessIdentifier
05-12 09:44:33.524  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 18843: Ljava/lang/management/ManagementFactory;.getRuntimeMXBean ()Ljava/lang/management/RuntimeMXBean;
05-12 09:44:33.524  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0000
05-12 09:44:33.549  24339-24339/com.example.bebo.connection W/org.bson.ObjectId﹕ Failed to get process identifier from JMX, using random number instead
    java.lang.NoClassDefFoundError: java.lang.management.ManagementFactory
            at org.bson.types.ObjectId.createProcessIdentifier(ObjectId.java:510)
            at org.bson.types.ObjectId.<clinit>(ObjectId.java:468)
            at com.mongodb.connection.ClusterId.<init>(ClusterId.java:47)
            at com.mongodb.connection.DefaultClusterFactory.create(DefaultClusterFactory.java:40)
            at com.mongodb.Mongo.createCluster(Mongo.java:658)
            at com.mongodb.Mongo.createCluster(Mongo.java:644)
            at com.mongodb.Mongo.<init>(Mongo.java:275)
            at com.mongodb.MongoClient.<init>(MongoClient.java:184)
            at com.mongodb.MongoClient.<init>(MongoClient.java:160)
            at com.example.bebo.connection.DBConnect.MongoConnect(DBConnect.java:19)
            at com.example.bebo.connection.DBCollections.connectToMongoCollection(DBCollections.java:14)
            at com.example.bebo.connection.MainActivity.<init>(MainActivity.java:13)
            at java.lang.Class.newInstanceImpl(Native Method)
            at java.lang.Class.newInstance(Class.java:1208)
            at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2122)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2271)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1205)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5146)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:732)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
            at dalvik.system.NativeStart.main(Native Method)
05-12 09:44:33.554  24339-24339/com.example.bebo.connection I/cluster﹕ Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
05-12 09:44:33.554  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method java.lang.management.ManagementFactory.getPlatformMBeanServer, referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.<init>
05-12 09:44:33.554  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve static method 18842: Ljava/lang/management/ManagementFactory;.getPlatformMBeanServer ()Ljavax/management/MBeanServer;
05-12 09:44:33.554  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x71 at 0x0003
05-12 09:44:33.554  24339-24339/com.example.bebo.connection E/dalvikvm﹕ Could not find class 'javax.management.ObjectName', referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.registerMBean
05-12 09:44:33.554  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve new-instance 2540 (Ljavax/management/ObjectName;) in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;
05-12 09:44:33.554  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0002
05-12 09:44:33.554  24339-24339/com.example.bebo.connection E/dalvikvm﹕ Could not find class 'javax.management.ObjectName', referenced from method com.mongodb.internal.management.jmx.JMXMBeanServer.unregisterMBean
05-12 09:44:33.554  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve new-instance 2540 (Ljavax/management/ObjectName;) in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;
05-12 09:44:33.554  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x22 at 0x0000
05-12 09:44:33.554  24339-24339/com.example.bebo.connection D/dalvikvm﹕ DexOpt: unable to opt direct call 0x4b3a at 0x04 in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;.registerMBean
05-12 09:44:33.559  24339-24339/com.example.bebo.connection D/dalvikvm﹕ DexOpt: unable to opt direct call 0x4b3a at 0x02 in Lcom/mongodb/internal/management/jmx/JMXMBeanServer;.unregisterMBean
05-12 09:44:33.564  24339-24339/com.example.bebo.connection I/cluster﹕ Cluster created with settings {hosts=[145.24.222.221:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
05-12 09:44:33.564  24339-24352/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 127.0.0.1:27017
    com.mongodb.MongoSocketOpenException: Exception opening socket
            at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port 27017) after 20000ms: isConnected failed: ECONNREFUSED (Connection refused)
            at libcore.io.IoBridge.isConnected(IoBridge.java:223)
            at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
            at libcore.io.IoBridge.connect(IoBridge.java:112)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
            at java.net.Socket.connect(Socket.java:833)
            at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
            at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: libcore.io.ErrnoException: isConnected failed: ECONNREFUSED (Connection refused)
            at libcore.io.IoBridge.isConnected(IoBridge.java:208)
            at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
            at libcore.io.IoBridge.connect(IoBridge.java:112)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
            at java.net.Socket.connect(Socket.java:833)
            at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
            at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
            at java.lang.Thread.run(Thread.java:841)
05-12 09:44:33.589  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.view.ViewGroup.onNestedScrollAccepted, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onNestedScrollAccepted
05-12 09:44:33.589  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 12208: Landroid/view/ViewGroup;.onNestedScrollAccepted (Landroid/view/View;Landroid/view/View;I)V
05-12 09:44:33.589  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
05-12 09:44:33.589  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.view.ViewGroup.onStopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.onStopNestedScroll
05-12 09:44:33.589  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 12214: Landroid/view/ViewGroup;.onStopNestedScroll (Landroid/view/View;)V
05-12 09:44:33.589  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000
05-12 09:44:33.594  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.support.v7.internal.widget.ActionBarOverlayLayout.stopNestedScroll, referenced from method android.support.v7.internal.widget.ActionBarOverlayLayout.setHideOnContentScrollEnabled
05-12 09:44:33.594  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 9779: Landroid/support/v7/internal/widget/ActionBarOverlayLayout;.stopNestedScroll ()V
05-12 09:44:33.594  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x000e
05-12 09:44:33.599  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
05-12 09:44:33.599  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 392: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
05-12 09:44:33.599  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-12 09:44:33.599  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
05-12 09:44:33.599  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 414: Landroid/content/res/TypedArray;.getType (I)I
05-12 09:44:33.599  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-12 09:44:33.599  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawable
05-12 09:44:33.604  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 355: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
05-12 09:44:33.604  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-12 09:44:33.604  24339-24339/com.example.bebo.connection I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawableForDensity
05-12 09:44:33.604  24339-24339/com.example.bebo.connection W/dalvikvm﹕ VFY: unable to resolve virtual method 357: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable;
05-12 09:44:33.604  24339-24339/com.example.bebo.connection D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
05-12 09:44:33.664  24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libEGL_mali.so
05-12 09:44:33.664  24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_mali.so
05-12 09:44:33.669  24339-24339/com.example.bebo.connection D/libEGL﹕ loaded /system/lib/egl/libGLESv2_mali.so
05-12 09:44:33.679  24339-24339/com.example.bebo.connection E/﹕ Device driver API match
    Device driver API version: 23
    User space API version: 23
05-12 09:44:33.679  24339-24339/com.example.bebo.connection E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Fri Mar 21 13:52:50 KST 2014
05-12 09:44:33.749  24339-24339/com.example.bebo.connection D/OpenGLRenderer﹕ Enabling debug mode 0
05-12 09:44:33.869  24339-24339/com.example.bebo.connection I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@41caee28 time:61772438
05-12 09:44:53.574  24339-24354/com.example.bebo.connection I/cluster﹕ Exception in monitor thread while connecting to server 145.24.222.221:27017
    com.mongodb.MongoSocketOpenException: Exception opening socket
            at com.mongodb.connection.SocketStream.open(SocketStream.java:63)
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
            at java.lang.Thread.run(Thread.java:841)
     Caused by: java.net.SocketTimeoutException: failed to connect to /145.24.222.221 (port 27017) after 20000ms
            at libcore.io.IoBridge.connectErrno(IoBridge.java:159)
            at libcore.io.IoBridge.connect(IoBridge.java:112)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:460)
            at java.net.Socket.connect(Socket.java:833)
            at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:50)
            at com.mongodb.connection.SocketStream.open(SocketStream.java:58)
            at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:114)
            at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:127)
            at java.lang.Thread.run(Thread.java:841)

1 个答案:

答案 0 :(得分:2)

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

<application></application>

取出