Android11三星A52s上Socket.connect连接alexanderweinert.net超时问题
问题描述
在运行Android 11的三星Galaxy A52s(型号:SM-A528B/DS)真机上调试Android应用时,调用Socket.connect连接alexanderweinert.net出现超时异常。该域名由namecheap.com管理,解析指向Hetzner托管的服务器。
相关代码
import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import javax.net.SocketFactory;
try { final Socket socket = SocketFactory.getDefault().createSocket(); final InetSocketAddress remoteAddress = new InetSocketAddress("alexanderweinert.net", 443); final int timeout = 2000; socket.connect(remoteAddress, timeout); } catch (IOException e) { e.printStackTrace(); }
问题特征
socket.connect调用会在2秒后超时,相同逻辑连接google.com等其他域名可正常连通- 调高超时阈值、切换连接80端口均无法解决问题
- 异常仅在真机上出现,模拟器运行正常
- WiFi和移动数据网络下均能复现,可排除本地网络配置错误的影响
- 可提供可复现问题的最小示例应用
已知信息
- 暂未测试Android 11以外的其他系统版本
- 调试信息确认域名可正常解析到正确IP
可能的异常原因
- 三星系统内置的域名/IP拦截规则:部分地区发售的三星机型固件内置了网络过滤机制,会默认拦截指向小众境外服务商的出站连接,且不会抛出明确的拦截提示,仅表现为连接超时。可尝试直接用解析得到的IP建立Socket连接,验证是否为域名层面的拦截。
- 三星定制Android 11的网络栈缺陷:三星对原生Android网络栈做了大量定制,部分Android 11版本固件存在TCP握手参数配置错误、MTU探测异常的问题,指向Hetzner这类境外IDC的连接会出现握手失败。可对真机网络抓包,确认TCP SYN包是否正常发出、服务器是否返回SYN+ACK响应。
- Hetzner服务器侧的区域IP封禁:Hetzner默认会封禁部分地区的移动运营商IP段的请求,可尝试用真机自带浏览器直接访问该域名的443端口服务,若浏览器也无法打开即可确认是服务器侧的IP拦截。
- 运营商透明代理过滤:部分地区运营商会对443、80等通用端口的非知名域名请求做过滤,不符合白名单规则的连接包会被直接丢弃,表现为连接超时。可尝试连接该域名的非通用端口(如8443,需服务器提前开放)验证是否为端口层面的拦截。
- 应用网络安全配置规则被三星系统强化:检查应用的
network_security_config.xml是否对该域名有特殊限制,部分三星系统会强化网络安全配置的执行逻辑,不符合规则的连接会被直接阻断而非抛出明确异常。
内容的提问来源于stack exchange,提问作者Alexander Weinert
相关产品推荐
相关产品推荐

