You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用仅调试模式+特定IP可连MongoDB 其余场景报连接超时

问题描述

集成MongoDB的Flutter项目仅实现用户注册(SignUp)功能,目前仅在调试模式、测试设备连接个人手机热点时可正常运行。其余场景下点击注册按钮后会长时间等待,最终抛出如下错误:

SocketException: Connection timed out (OS Error: Connection timed out, errno = 110), address = 10.76.236.118, port = 44670

测试设备为三星Galaxy A50 (SM-A505F)安卓真机,可确认代码本身无逻辑错误:调试模式+设备连接对应手机热点(使用热点分配的特定IP)时,注册功能可完全正常运行。

相关截图

注册页报错截图
连接配置截图1
连接配置截图2
MongoDB运行状态截图

已提供配置信息

配置文件路径:./android/app/src/main/AndroidManifest.xml
配置内容如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shopping">
    <uses-permission android:name="android.permission.INTERNET"/> 
   <application
        android:label="shopping"
        android:name="${applicationName}"
        android:icon="@mipmap/launcher_icon">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>
问题根因与解决方案

核心问题

你的AndroidManifest配置没有问题,已经声明了必要的互联网权限,故障根源是IP地址可达性问题,和调试/发布模式、MongoDB本身的基础配置无关:

  • 你代码里写死的10.76.236.118是运行MongoDB的电脑连接你手机热点时,热点DHCP分配的局域网私有IP,这类10段、192.168段、172.16-31段的私网IP仅在对应局域网内可被访问,一旦手机切换到其他WiFi、使用移动数据,就无法路由到这个私网地址,必然出现连接超时。
  • 调试模式+连接个人热点时能正常运行,本质是此时手机和运行MongoDB的电脑处于同一个热点局域网内,手机可以正常访问到该私网IP对应的MongoDB服务。

修复方案

根据你的使用场景选对应方案即可:

  1. 本地局域网测试场景
    每次切换局域网时,把代码中MongoDB连接地址的IP,替换为当前局域网下运行MongoDB的电脑对应的局域网IP,同时保证手机和电脑连接同一个WiFi/热点,且电脑系统防火墙放开MongoDB监听的44670端口入站规则即可连通。
    若后续切换网络后仍出现连接超时,可在AndroidManifest.xml的<application>标签下补充android:usesCleartextTraffic="true"属性,放行Android 9+系统的明文HTTP流量限制。
  2. 跨网络/公网使用场景
    强烈不建议Flutter客户端直连MongoDB,这种写法会把数据库账号密码、连接地址直接打包进APK安装包,极易被反编译泄露,导致数据库被拖库。正确做法是在服务端编写一层业务接口(可用Node.js/Flask/Go等任意技术栈实现),客户端仅请求公网部署的后端接口,由后端服务操作MongoDB完成注册逻辑。
    如果只是临时公网测试,可选择两种方式:
    • 将MongoDB部署在带公网IP的云服务器上,配置好账号密码认证、防火墙端口放行规则,连接地址填写服务器公网IP
    • 使用内网穿透工具将本地44670端口映射到公网,使用穿透工具生成的公网地址作为连接地址,务必开启MongoDB的账号认证,避免数据泄露。

内容的提问来源于stack exchange,提问作者Skyturkish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 06:12:22