资讯动态

安卓应用连接Tomcat服务器问题排查与解决方案

发布时间:2026/10/27 11:41:40 来源:尧图企业网站定制
1. 问题现象与初步诊断当安卓应用无法连接Tomcat服务器时通常会在Android Studio的Logcat中看到类似以下的错误信息java.net.ConnectException: Failed to connect to /192.168.1.100:8080或者javax.net.ssl.SSLHandshakeException: Handshake failed首先需要确认的是基础网络连通性。在Android Studio的终端中执行adb shell ping 192.168.1.100如果无法ping通说明存在网络层问题。这种情况常见于设备与服务器不在同一局域网防火墙拦截了请求使用了错误的IP地址注意模拟器访问本地Tomcat需要使用10.0.2.2这个特殊地址而不是127.0.0.1或localhost2. Tomcat服务端配置检查2.1 端口监听验证在服务器上运行netstat -tuln | grep 8080如果没有输出说明Tomcat未正常启动。检查Tomcat日志tail -f /path/to/tomcat/logs/catalina.out2.2 连接器配置检查server.xml中的Connector配置Connector port8080 protocolHTTP/1.1 connectionTimeout20000 URIEncodingUTF-8 useBodyEncodingForURItrue maxPostSize2097152 /关键参数说明maxPostSize影响大文件上传connectionTimeout连接超时时间URIEncoding解决中文乱码问题2.3 跨域问题处理如果前端收到CORS错误需要在web.xml中添加filter filter-nameCorsFilter/filter-name filter-classorg.apache.catalina.filters.CorsFilter/filter-class /filter filter-mapping filter-nameCorsFilter/filter-name url-pattern/*/url-pattern /filter-mapping3. Android客户端网络配置3.1 网络权限声明AndroidManifest.xml中必须包含uses-permission android:nameandroid.permission.INTERNET / uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE /3.2 主线程限制处理Android不允许在主线程执行网络操作推荐使用OkHttpval client OkHttpClient() val request Request.Builder() .url(http://your-server:8080/api) .build() client.newCall(request).enqueue(object : Callback { override fun onFailure(call: Call, e: IOException) { Log.e(NETWORK, Connection failed, e) } override fun onResponse(call: Call, response: Response) { val body response.body?.string() Log.d(NETWORK, Response: $body) } })3.3 HTTPS证书处理如果使用自签名证书需要自定义TrustManagerval trustAllCerts arrayOfTrustManager(object : X509TrustManager { override fun checkClientTrusted(chain: Arrayout X509Certificate?, authType: String?) {} override fun checkServerTrusted(chain: Arrayout X509Certificate?, authType: String?) {} override fun getAcceptedIssuers() arrayOfX509Certificate() }) val sslContext SSLContext.getInstance(SSL) sslContext.init(null, trustAllCerts, java.security.SecureRandom()) val client OkHttpClient.Builder() .sslSocketFactory(sslContext.socketFactory, trustAllCerts[0] as X509TrustManager) .hostnameVerifier { _, _ - true } .build()4. JSON数据交互问题排查4.1 数据格式验证使用Postman测试接口返回的JSON是否有效{ status: 200, data: { id: 123, name: 测试数据 } }4.2 Gson解析配置在build.gradle中添加依赖implementation com.google.code.gson:gson:2.8.9解析示例data class ApiResponse( val status: Int, val data: UserData ) data class UserData( val id: Int, val name: String ) val gson Gson() val response gson.fromJson(jsonString, ApiResponse::class.java)4.3 日期格式处理解决Timestamp时区问题val gson GsonBuilder() .setDateFormat(yyyy-MM-ddTHH:mm:ss.SSSZ) .create()5. 高级调试技巧5.1 网络请求日志在OkHttp中添加日志拦截器val logging HttpLoggingInterceptor().apply { level HttpLoggingInterceptor.Level.BODY } val client OkHttpClient.Builder() .addInterceptor(logging) .build()5.2 Wireshark抓包分析过滤条件示例ip.addr 192.168.1.100 tcp.port 80805.3 服务端日志增强在log4j.properties中添加log4j.logger.org.apache.catalinaDEBUG log4j.logger.org.apache.coyoteDEBUG6. 常见问题解决方案问题现象可能原因解决方案连接超时网络不可达检查IP和端口是否正确SSL错误证书不匹配添加证书信任或使用HTTP400错误请求格式错误检查Content-Type和请求体404错误路径不存在验证服务端API路径500错误服务端异常查看Tomcat日志JSON解析失败数据格式不符用在线工具验证JSON有效性7. 性能优化建议连接池配置val client OkHttpClient.Builder() .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES)) .build()超时设置val client OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .build()缓存控制val cacheSize 10 * 1024 * 1024 // 10MB val client OkHttpClient.Builder() .cache(Cache(File(context.cacheDir, http), cacheSize.toLong())) .build()在实际项目中我发现大部分连接问题都源于基础配置错误。建议按照以下顺序排查验证物理网络连通性ping测试检查服务端是否正常监听telnet测试确认Android权限配置检查HTTPS证书有效性验证API路径和参数对于复杂的生产环境可以考虑使用Charles或Fiddler进行中间人抓包分析这能直观展示请求/响应的完整过程。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑