设备网络环境
服务器可达性测试
ping
或 telnet
工具测试服务器IP及端口:
ping xxx.xxx.xxx.xxx
或 telnet xxx.xxx.xxx.xxx 端口号
。 服务器是否在线
防火墙与端口配置
问题类型 | 排查步骤 |
---|---|
API地址错误 | 确认应用中配置的服务器地址(域名/IP)是否正确,避免拼写错误或遗漏协议(http/https)。 |
端口号不匹配 | 检查服务器监听端口与应用请求端口是否一致(如服务器监听8080,应用需请求8080)。 |
SSL证书问题 | 若使用HTTPS,确保证书未过期且安卓设备信任该证书(部分旧版安卓需手动安装证书)。 |
安卓设备本地限制
服务器防火墙策略
iptables
限制。网络请求超时设置
OkHttp
的timeout
参数)。 OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .build();
异步任务与线程
AsyncTask
、RxJava
或Coroutine
处理网络操作。日志与错误码分析
Logcat
查看详细错误日志(如UnknownHostException
、SocketTimeoutException
)。 ENETUNREACH
| 网络不可达(路由问题) |ETIMEDOUT
| 请求超时(服务器响应慢) |SSLHandshakeException
| SSL证书不匹配或过期 |解答:
ping your-server.com
Request timed out
,可能是服务器宕机或网络阻断; Network is unreachable
,检查设备网络配置或路由规则。解答:
// 使用自定义TrustManager忽略证书校验(仅开发环境使用) val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager { override fun checkClientTrusted(chain: Array<out X509Certificate>, authType: String) {} override fun checkServerTrusted(chain: Array<out X509Certificate>, authType: String) {} override fun getAcceptedIssuers(): Array<X509Certificate> = arrayOf() }) val sslContext = SSLContext.getInstance("SSL") sslContext.init(null, trustAllCerts, SecureRandom()) val client = OkHttpClient.Builder() .sslSocketFactory(sslContext.socketFactory) .hostnameVerifier { _, _ -> true } .build()