Android Studio连接SQL Server遇连接拒绝错误,求助解决方案
别急,我之前帮同学处理过类似的学校项目问题,咱们先把报错拆解开,再针对性排查:
首先看你给出的报错信息:
Probably not a portal: exception java.net.UnknownHostException: Unable to resolve host "connectivitycheck.gstatic.com": No address associated with hostname
java.net.ConnectException: failed to connect to /10.20.37.39 (port 1433): connect failed: ECONNREFUSED (Connection refused)
第一个UnknownHostException其实是Android系统自带的网络连通性检查,和SQL Server连接本身无关,但如果你的设备/模拟器连不上外网,可能会影响局域网内的SQL Server连接,先简单确认下:模拟器的网络设置选“桥接模式”或者“自动”,真机确保连的是学校里和SQL Server同网段的WiFi。
重点解决第二个ECONNREFUSED的问题,除了你已经排查的防火墙、TCP/IP启用、IP配置,再补充几个关键排查点:
确认SQL Server真的在监听1433端口
打开SQL Server配置管理器 → 展开“SQL Server网络配置” → 选中你的实例的“TCP/IP” → 右键属性 → 切换到“IP地址”标签,拉到最下面的“IPAll”,确认TCP端口是1433。之后一定要重启SQL Server服务(在系统服务里找SQL Server(MSSQLSERVER)之类的服务,重启它)。
另外在SQL Server所在的机器上,打开命令提示符,输入netstat -ano | findstr :1433,如果有输出,说明端口在监听,对应的PID要和SQL Server进程的PID一致(任务管理器里找sqlservr.exe的PID)。检查SQL Server的远程连接和身份验证设置
打开SQL Server Management Studio,右键你的服务器实例 → 属性 → 切换到“连接”标签,确保勾选了“允许远程连接到此服务器”。
再右键服务器实例 → 安全性 → 确认服务器身份验证是“SQL Server和Windows身份验证模式”。如果之前是纯Windows模式,修改后要重启服务,然后创建一个带远程连接权限的SQL登录账号(比如启用sa账号,或者新建账号并给它dbowner权限)。验证Android设备和SQL Server的网络连通性
在Android模拟器的命令行(或者真机上装个终端APP),输入ping 10.20.37.39,如果ping不通,说明学校的局域网可能把你的设备和SQL Server所在机器隔离了,得找学校网管确认权限;如果能ping通,再试telnet 10.20.37.39 1433,如果连接失败,还是防火墙或者端口监听的问题。处理SQL进程被换出的问题
你提到SQL进程很大一部分被换出,这说明SQL Server所在的机器内存不足,系统把SQL的部分内存换到了虚拟内存(硬盘)里,导致响应变慢甚至无法处理新连接。可以:- 在SQL Server所在机器上,关闭不必要的后台进程,释放内存;
- 打开SQL Server Management Studio,右键服务器实例 → 属性 → 内存 → 设置“最大服务器内存(MB)”,比如如果机器有8G内存,设为6144(6G),避免SQL占用全部内存导致系统卡顿。
按这个顺序排查下来,应该能找到问题所在。毕竟是学校项目,大概率是SQL Server的远程连接没开全,或者端口监听没配置对。
内容的提问来源于stack exchange,提问作者abun

