【问题标题】:Objectbox error: "W/Box: [Cl-Lws] LWS: Unable to open socket [Cl-Lws] LWS client connection error: unable to open socket"对象框错误:“W/Box:[Cl-Lws] LWS:无法打开套接字 [Cl-Lws] LWS 客户端连接错误:无法打开套接字”
【发布时间】:2021-11-18 22:49:54
【问题描述】:

我正在尝试将我的 android 应用程序与同步服务器同步,但客户端似乎无法连接到服务器。 Admin UI 在 localhost:9980 上完美运行。 服务器在 docker 上运行。

001-13:29:41.2231 [INFO ] [SvrUws] UwsServer listening on all interfaces, port 9999 without SSL
001-13:29:41.2234 [WARN ] [SvSync] UNSECURED no-authentication mode enabled - every client allowed without any validation
001-13:29:41.2256 [INFO ] [SvSync] Started on port 9999
001-13:29:41.2257 [INFO ] [SySvAp] Starting object browser on 0.0.0.0:9980
001-13:29:41.2263 [INFO ] [HttpSv] Running in single-store mode with an already opened store
001-13:29:41.2263 [INFO ] [HttpSv] Listening on 0.0.0.0:9980
001-13:29:41.2266 [WARN ] [HttpSv] UNSECURED no-authentication mode enabled:
!!! Allowing access to anyone without any user validation
!!! After e.g. adjusting user logins, please restart asap to secure the server again
001-13:29:41.2266 [INFO ] [HttpSv] User management: enabled
001-13:29:41.2305 [INFO ] [HttpSv] HttpServer listening on all interfaces, port 9980
001-13:29:41.2318 [INFO ] [SySvAp] ObjectBox sync server started in 62 ms

首先我尝试了文档所说的“wss://127.0.0.1”,然后我尝试使用 ws,然后使用指定的端口号(9980 和 9999)。 然后我尝试配置url。

{
    "dbDirectory": "objectbox",
    "bind": "ws://0.0.0.0:9999",
    "browserBind": "http://127.0.0.1:9980",
    "browserThreads": 4,
    "certificatePath": ""
}

这些都不起作用。请帮助我如何找到正确的连接地址。

更新: 在模拟器中,您必须使用 10.0.2.2 才能访问 localhost! 在 MainActivity 的 onCreate() 方法中:

BoxStore boxStore = ObjectBox.get();

        SyncClient syncClient = Sync.client(
                boxStore,
                "ws://10.0.2.2", 
                SyncCredentials.none()
        ).buildAndStart();

【问题讨论】:

    标签: android server connection objectbox objectbox-android


    【解决方案1】:

    您需要指定运行服务器的机器的IP。

    如果您运行的是 Android 模拟器,请使用 10.0.2.2 访问主机。

    这实际上是对Sync troubleshooting guide 的一个很好的补充……已更新,谢谢。

    【讨论】:

    • 我正在运行模拟器,是的,我也尝试了 10.0.2.2,但它没有用。
    • 从模拟器内部,请启动浏览器应用程序并输入10.0.2.2:9980 - 你看到 ObjectBox 管理网络应用程序了吗?
    • 是的,我明白了。
    • 太棒了。接下来,在管理界面中,启用调试日志(请参阅sync.objectbox.io/objectbox-sync-server#status)并检查服务器的输出。当客户端尝试连接时,您应该会看到一些信息,例如为什么它被拒绝的错误。如果您没有看到任何内容,则仍然存在网络问题。然后,尝试在浏览器中使用 9999 端口访问服务器;当连接良好时,您应该会看到一些短文本。
    • 我在管理界面中没有该选项。我在上面发布了我的管理 UI 的图片。如果我在浏览器中转到端口 9999,我会看到一条“Hello HTTP request”消息,所以问题可能不在于网络。
    【解决方案2】:

    解决了!

    android 应用缺少这些权限:

    <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" />
    

    添加这些后,一切正常!

    【讨论】:

    • 如果您的项目不需要,可以删除ACCESS_WIFI_STATE 权限。 ACCESS_NETWORK_STATE 足以让 ObjectBox 检测网络变化。
    猜你喜欢
    • 1970-01-01
    • 2015-12-12
    • 2013-09-11
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 2022-06-13
    相关资源
    最近更新 更多